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

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

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

3 ответа3

5

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

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

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

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

3

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

1

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

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