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