Wait

殭屍程序無需“等待”即可收穫

  • April 11, 2021

我知道如果一個子程序沒有得到正確的收穫,它就會變成一個殭屍,你可以通過ps命令看到它。

還有“等

$$ pid $$" 命令將等待子shell 在後台執行,直到它完成並收穫它。 我有一個這樣的腳本:

#!/bin/bash
sleep 5 &

tail -f /dev/null

我的問題是,我不使用waitaftersleep 5 &並且父 shell 永遠不會因為 終止tail,那麼為什麼sleep 5 &不會成為殭屍?我看到它在完成後消失了ps,不知道誰會收穫它?

這是讓 shell 模仿 OS API 的缺陷之一。它確實會造成混亂。在這種情況下,您將wait() (linux API) 與wait (bash 函式) 混淆了。

簡而言之,Bash 會為您處理收穫過程,您通常不需要考慮這一點。bash 命令對wait收割程序沒有影響。

當您的子作業終止時,將通過SIGCHLD 信號通知 bash 。這將在發生這種情況時 bash 將停止它正在做的任何事情並收割停止的孩子。然後它會回到它正在做的任何事情。

引用自:https://unix.stackexchange.com/questions/644529