
No momento estou executando um processo na tela GNU. A tela é iniciada com o comando screen -dmS screenname
e anexada com screen -r screenname
. Um processo é iniciado na sessão de tela e é encerrado após algum tempo.
Como eu faria com que a tela fosse encerrada quando o processo interno terminasse?
Nota: eu não preferiria um loop, então estou procurando uma alternativa. Às vezes eu inicio o processo seguindo & exit
-o, mas isso nunca é executado se eu usar kill -9 pid
no processo.
Responder1
Inicie o processo com exec
, para que seja a única coisa dentro da tela (ele substitui o shell em vez de retornar ao shell após terminar).
Responder2
Experimente isto:
screen -dmS screenname sleep 5
sleep 3
screen -ls
sleep 3
screen -ls
No primeiro screen -ls
, você deverá ver sua sessão de tela. No segundo, deveria ter desaparecido. A tela sairá automaticamente quando a última janela for fechada. Como você está executando apenas um único programa dentro da tela, a última (e única) janela da sessão da tela será fechada quando o programa for encerrado. Se você estiver iniciando o programa anexando-se à sessão de tela e digitando o comando no prompt do shell dentro da sessão de tela, a tela estará aguardando a saída do seu shell. Você pode fazer com que isso aconteça quando o programa terminar digitando exec PROGRAM
em vez de apenas PROGRAM
no prompt do shell (na verdade, isso sairá do shell e o substituirá por PROGRAM
).
Se tudo que você precisa é a capacidade de separar a tela e nada mais, uma alternativa leve édtach.
Responder3
Você pode iniciar a sessão de tela com o nome de um comando, por exemplo, screen -dmS session vim
abrirá uma sessão de tela que sai com o vim. De dentro de uma sessão de tela existente, você pode usar exec
para obter o mesmo efeito:.