如何通过运行 sudo 命令来终止屏幕会话?

如何通过运行 sudo 命令来终止屏幕会话?

我正在尝试编写一个可以重新启动 NodeJS 服务器的 bash 脚本。这是我使用服务器启动屏幕的方式:

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

最终结果如下(这意味着它正在工作):

$ 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

这就是我尝试关闭该服务器的方法:

screen -S web-server -X quit

最终僵尸进程(服务器ppid变为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

我如何终止该屏幕会话,包括其中正在运行的进程?

对于那些可能关心的人 - 我需要在屏幕上使用 sudo 的原因是我在端口 80 上运行服务器,该节点需要超级用户权限。

答案1

因此这似乎是一个可能的解决方案:

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

如果有人能提出更好的(更干净的)解决方案(而不是寻找屏幕的子进程并杀死它们),我会非常乐意接受这个答案+赞成它。

相关内容