Próbuję napisać skrypt bash, który ponownie uruchomiłby mój serwer NodeJS. Oto jak uruchamiam ekran z serwerem:
screen -S web-server -d -m node web-server.js
co kończy się na tym (co oznacza, że działa):
$ 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
I tak próbuję zabić ten serwer:
screen -S web-server -X quit
Które faktycznie kończą w procesie zombie (ppid serwera zmienia się na 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
Jak zabić tę sesję ekranu, w tym trwający proces?
Dla tych, którzy mogą się martwić - powodem, dla którego potrzebuję sudo na ekranie, jest to, że uruchamiam serwer na porcie 80, dla którego węzeł wymaga uprawnień superużytkownika.
nginx
który sam nasłuchiwałby na porcie 80 i przekazywał połączenia do twojego node
procesu nasłuchując na nieuprzywilejowanym porcie (lub nawet na uniksowym gnieździe itp.).