我實現了一個簡單的c shell來接收像sleep 3 &
這樣的命令。一旦工作完成,我還實施它來「收聽」sigchild信號。C shell - 在後臺獲取作業一旦完成就報告狀態
但是,如何在ubuntu shell完成後,將作業ID和命令打印出來?
我實現了一個簡單的c shell來接收像sleep 3 &
這樣的命令。一旦工作完成,我還實施它來「收聽」sigchild信號。C shell - 在後臺獲取作業一旦完成就報告狀態
但是,如何在ubuntu shell完成後,將作業ID和命令打印出來?
我建議不要捕捉SIGCHLD
信號。
更簡單的方法是使用WNOHANG
選項撥打waitpid
。如果它返回0
,則知道具有該特定PID的作業仍在運行,否則該過程已終止,並從status
參數中獲取其退出代碼,並相應地打印該消息。
此外,bash不會在作業完成時打印作業完成狀態,而是在下一個命令發佈時打印作業完成狀態,因此這是完美適合於waitpid
。
該方法的一個小缺點是,在終止和您撥打waitpid
之間的時間段內,作業進程將保持爲殭屍狀態,但對於shell可能無關緊要。
您需要記住孩子的pid(來自fork)以及shell中執行的命令(在某種表格或地圖結構中)。然後,當你得到一個SIGCHILD時,你會發現這個孩子的PID,並且給你相應的命令。
好的。我明白更好。我懂了 – youcanlearnanything