Como matar a sessão de tela com o comando sudo em execução?

2

Estou tentando escrever um script que relançaria meu servidor NodeJS. É assim que eu estou lançando a tela com o servidor:

screen -S web-server -d -m node web-server.js

que acabam nisso (o que significa que está funcionando):

$ ps -Af | grep node
ubuntu  19504   1       0   10:20   ?       00:00:00 SCREEN -S web-server -d -m sudo node web-server.js
root    19506   19504   0   10:20   pts/2   00:00:00 sudo node web-server.js
root    19507   19506   8   10:20   pts/2   00:00:00 node web-server.js

E é assim que estou tentando matar esse servidor:

screen -S web-server -X quit

Que na verdade acabam em um processo zumbi (o servidor ppid muda para 1):

$ ps -Af | grep node
root    19506   1       0   10:20   ?   00:00:00 sudo node web-server.js
root    19507   19506   0   10:20   ?   00:00:00 node web-server.js

Como faço para matar essa sessão de tela, incluindo o processo em execução dentro dela?

Para aqueles de vocês que podem se preocupar - a razão pela qual eu preciso de sudo na tela é que estou executando o servidor na porta 80 para qual nó requer permissões de superusuário.

    
por Radek Simko 04.07.2013 / 12:37

1 resposta

0

Então, isso parece ser uma solução possível:

screen -list | grep Detached | \
awk '{ print $1 }' | awk -F. '{ if($2=="web-server") print $1 }' | \
xargs sudo pkill -P

Se alguém encontrar uma solução melhor (mais limpa) (em vez de procurar por processos-filho de tela e matá-los), ficarei mais do que feliz em aceitar, em vez disso, que responda + para cima.

    
por 06.07.2013 / 12:33