Linux: завершить экран, как только процесс завершится

0

Прямо сейчас я запускаю процесс на экране GNU. Экран запускается командой screen -dmS screennameи прикрепляется с помощью screen -r screenname. Процесс запускается в сеансе экрана и через некоторое время останавливается.

Как бы я завершил экран, когда процесс внутри закончился?

Примечание: я бы не предпочел цикл, поэтому я ищу альтернативу. Иногда я запускаю процесс & exitследующим образом, но он никогда не выполняется, если я использую kill -9 pidэтот процесс.

hexacyanide
источник

Ответы:

4

Запустите процесс exec, чтобы он был единственным на экране (он заменяет оболочку, а не возвращается в оболочку после завершения).

Алан Карри
источник
Не могли бы вы привести пример?
гексацианид
После того, как screen -r screennameвы введете текст, вы попадете внутрь экрана в командной строке. В этом приглашении введите, а exec yourcommandзатем отсоединить.
5

Попробуй это:

screen -dmS screenname sleep 5
sleep 3
screen -ls
sleep 3
screen -ls

На первом screen -lsвы должны увидеть ваш сеанс экрана. По второму оно должно пропасть. Экран автоматически закроется, когда закроется последнее окно. Поскольку внутри экрана запускается только одна программа, последнее (и единственное) окно в сеансе экрана закроется при выходе из программы. Если вы запускаете программу, присоединяясь к сеансу экрана, а затем вводите команду в приглашении оболочки внутри сеанса экрана, то экран ожидает выхода из вашей оболочки. Вы можете заставить это произойти, когда программа завершит работу, набрав exec PROGRAMвместо PROGRAMприглашения командной строки (на самом деле это выйдет из оболочки и заменит ее на PROGRAM).

Если все, что вам нужно, это возможность отсоединения экрана и ничего больше, легкая альтернатива - dtach .

Райан Томпсон
источник
2

Вы можете запустить сеанс экрана с именем команды, например screen -dmS session vim, откроет сеанс экрана, который завершается с помощью vim. В рамках существующего сеанса экрана вы можете использовать execтот же эффект :.

Kevin
источник
1
Просто заполнитель, который я использовал для проверки. Это будет работать так же, с чем угодно.
Кевин