Inicie o processo com exec
, então ele será a única coisa dentro da tela (ele substitui o shell em vez de retornar ao shell depois que ele é feito).
Agora mesmo estou executando um processo dentro da tela do GNU. A tela é iniciada com o comando screen -dmS screenname
e o anexado com screen -r screenname
. Um processo é iniciado na sessão de tela e é eliminado depois de algum tempo.
Como terminaria a tela quando o processo interno terminasse?
Nota: Eu não preferiria um loop, então estou procurando uma alternativa. Às vezes, inicio o processo com um & exit
seguindo-o, mas isso nunca é executado se eu usar kill -9 pid
no processo.
Tente isto:
screen -dmS screenname sleep 5
sleep 3
screen -ls
sleep 3
screen -ls
No primeiro screen -ls
, você deve ver sua sessão na tela. No segundo, deveria ter desaparecido. A tela sairá automaticamente quando a última janela for fechada. Como você só está executando um único programa dentro da tela, a última (e única) janela na sessão da tela será fechada quando o programa sair. 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 o shell sair. Você pode fazer isso acontecer 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 o que você precisa é a capacidade de destacar a tela e nada mais, uma alternativa leve é dtach .
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:.
Tags bash gnu-screen