Примерно то, о чем говорится в названии:
Мой скрипт оболочки должен
- Запустите команду A, дождитесь завершения.
- запустить "экран"
- выполнить команду B1 на начальном экране
- открыть новое окно (обычно через Cmd-ac)
- выполнить команду B2 в новом окне
- открыть новое окно
- выполнить команду B3 в новом окне
Вот и все, не нужно ждать, пока некоторые (или все) будут сделаны, хотя это дало бы бонусные баллы. Как я мог это сделать?
решение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
, но у меня работает только последний вариант, несмотря на противоположное в документации.)