1

Почти то, что говорит название:

Мой скрипт должен

  • Запустите команду A, дождитесь завершения
  • запустить "экран"
  • запустить команду B1 на первом экране
  • открыть новое окно (обычно через Cmd-ac)
  • запустить команду B2 в новом окне
  • открыть новое окно
  • запустить команду B3 в новом окне

Вот и все, не нужно ждать, пока некоторые (или все) будут сделаны, хотя это даст бонусные баллы. Как я мог это сделать?

1 ответ1

1

Запустите фоновое screen имя сеанса "mysession":

screen -d -m -S mysession

Запустите top в первом окне

screen -S mysession -X exec top

Запустите другое окно, назовите его "win1" и запустите в нем « vmstat 10 ».

screen -S mysession -X screen -t win1
screen -S mysession -p win1 -X exec vmstat 10

Запустите другое окно, назовите его "win2" и запустите в нем « iostat 30 ».

screen -S mysession -X screen -t win2 
screen -S mysession -p win2 -X exec iostat 30

Для подключения и просмотра сеанса:

screen -x -S mysession

Если какая-либо из программ завершится, окно не закроется, так как на screen будет запущена оболочка в каждой (которую вы можете использовать при необходимости).

- ИЛИ - если вам нужна только одна команда для каждого окна или вы хотите более легко выполнять очистку после завершения процессов, не запускайте оболочку по умолчанию в каждом окне, только команду (ы):

screen -d -m -S mysession top
screen -S mysession -p 0 -X title win0    # optional!
screen -S mysession -X screen -t win1 vmstat 10
screen -S mysession -X screen -t win2 iostat 30

screen "завершит" окно (возможно, оставив содержимое окна нетронутым, см. zombie ниже), когда процесс завершится, или отключит их:

screen -S mysession -X quit   # nuke whole the session

или же

screen -S mysession -p win2 -X kill
screen -S mysession -p win1 -X kill
screen -S mysession -p 0 -X kill

(это может или не может убить любые запущенные процессы, хотя screen будет отправлять каждый SIGHUP)

Если вы хотите, чтобы screen автоматически закрывал окна и выходил после завершения всех процессов, добавьте его после создания сеанса (хотя, если в вашем zombie не установлено .screenrc , это, вероятно, по умолчанию в любом случае):

screen -S mysession -X zombie

Это отменяет "зомби" ключи закрытия и воскрешения, затем окна исчезают, когда команда в каждом окне завершается, сам screen закрывается, когда закрывается последнее окно. (Возможно, вам придется использовать defzombie вместо zombie , но у меня работает только последняя, несмотря на документацию об обратном.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .