Linux: Завершить работу screen после завершения процесса

Linux: Завершить работу screen после завершения процесса

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

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

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

решение1

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

решение2

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

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

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

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

решение3

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

Связанный контент