向“script”發送 SIGTERM 會導致殭屍進程

向“script”發送 SIGTERM 會導致殭屍進程

我正在實作一個簡單的系統來透過 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停止觀察進程並優雅地終止(同時刷新打字稿)?

相關內容