
Прямо сейчас я запускаю процесс в 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
для получения того же эффекта:.