![向“脚本”发送 SIGTERM 会导致僵尸进程](https://linux22.com/image/1586009/%E5%90%91%E2%80%9C%E8%84%9A%E6%9C%AC%E2%80%9D%E5%8F%91%E9%80%81%20SIGTERM%20%E4%BC%9A%E5%AF%BC%E8%87%B4%E5%83%B5%E5%B0%B8%E8%BF%9B%E7%A8%8B.png)
我正在实现一个简单的系统,通过 SSH 远程运行作业。我的目标是在作业中运行作业screen
并使用记录其所有输出script
,并在作业终止时将打字稿上传到服务器。然而,我在正确处理 SIGTERM 方面遇到了困难(例如,当远程机器即将关闭时),因为进程script
在收到 SIGTERM 时不会终止(相反,在其中运行的进程script
变成了僵尸进程)。
假设以下命令:
script -e -q -c 'ping www.google.com'
使用killall -TERM script
发送 SIGTERM 信号给script
进程似乎将 SIGTERM 信号传递给ping
(终止),但是,它会变成僵尸进程并且script
不会终止:
> 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>
如果我理解正确的话,该ping
进程是僵尸进程,因为父script
进程仍在观察它。但是,是否可以停止script
观察该进程并正常终止(同时刷新打字稿)?