向“脚本”发送 SIGTERM 会导致僵尸进程

向“脚本”发送 SIGTERM 会导致僵尸进程

我正在实现一个简单的系统,通过 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观察该进程并正常终止(同时刷新打字稿)?

相关内容