2011-10-24 65 views

回答

1

我建議不要捕捉SIGCHLD信號。

更簡單的方法是使用WNOHANG選項撥打waitpid。如果它返回0,則知道具有該特定PID的作業仍在運行,否則該過程已終止,並從status參數中獲取其退出代碼,並相應地打印該消息。

此外,bash不會在作業完成時打印作業完成狀態,而是在下一個命令發佈時打印作業完成狀態,因此這是完美適合於waitpid

該方法的一個小缺點是,在終止和您撥打waitpid之間的時間段內,作業進程將保持爲殭屍狀態,但對於shell可能無關緊要。

+0

好的。我明白更好。我懂了 – youcanlearnanything

0

您需要記住孩子的pid(來自fork)以及shell中執行的命令(在某種表格或地圖結構中)。然後,當你得到一個SIGCHILD時,你會發現這個孩子的PID,並且給你相應的命令。