Estou implementando um sistema simples para executar trabalhos remotamente via SSH. Meu objetivo é executar o trabalho dentro de um screen
e registrar toda a sua saída usando script
e fazer upload do texto digitado para um servidor quando o trabalho terminar. Estou, no entanto, lutando para lidar com o SIGTERM corretamente (por exemplo, quando a máquina remota está prestes a desligar), pois o script
processo não termina ao receber o SIGTERM (em vez disso, o processo executado script
torna-se um zumbi).
Suponha o seguinte comando:
script -e -q -c 'ping www.google.com'
Usar killall -TERM script
para enviar um sinal SIGTERM para o script
processo parece passar o sinal SIGTERM para ping
(que termina), porém, torna-se um processo zumbi e script
não termina:
> ps -aux | grep ping
karel 16460 0.0 0.0 10852 2732 pts/2 S+ 12:57 0:00 script -e -q -c ping www.google.com
karel 16461 0.1 0.0 0 0 ? Zs 12:57 0:00 [ping] <defunct>
Se bem entendi, o ping
processo é um zumbi porque o script
processo pai ainda o está observando. No entanto, é possível parar de script
observar o processo e encerrá-lo normalmente (enquanto libera o texto digitado)?