我正在實作一個簡單的系統來透過 SSH 遠端執行作業。我的目標是在 a 中運行作業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
停止觀察進程並優雅地終止(同時刷新打字稿)?