2017-03-17 97 views
1

我有一個父級和子級進程通過管道進行通信。家長寫和孩子讀。而且,一旦孩子讀完了,它會對已讀取的數據進行一些處理。 我需要確保父級等待孩子完成其數據處理(未終止)。waitpid親子信號

我需要的只是父母和孩子之間的一個簡單的等待/信號機制。

我相信父母在完成寫作後可以調用waitpid(child_process_id,& status,flag)。但我不確定孩子如何能夠發出狀態改變的信號,以及父母等待的標誌。

會欣賞任何指針!

回答

0

您可以使用自定義信號。在那種情況下,孩子使用getppid()來獲得其父母進程並通過kill發送該信號。與此同時,父設置特定信號的信號處理程序(通過signal),並使用waitpid等待。由於waitpid是可中斷的,因此會通知家長該孩子已完成處理,並且如果孩子因任何原因死亡而不發送信號,該孩子也將停止等待。

或者,只需在父節點和子節點寫入位置設置第二個管道。父母只是讀取其管道末端。孩子寫一條短消息(OK或DONE)來通知其父母其處理已完成並關閉管道。它的父母得到消息,它知道處理是正確的,如果管道關閉沒有消息,它知道有什麼問題。恕我直言,這是更簡單的設置。