2014-01-21 31 views
9

我知道waitpid()被用來等待一個過程完成,但是如何準確地使用它?waitpid()的使用示例?

在這裏,我想要做的是,創建兩個孩子,等待第一個孩子完成,然後在退出之前殺死第二個孩子。

//Create two children 
pid_t child1; 
pid_t child2; 
child1 = fork(); 

//wait for child1 to finish, then kill child2 
waitpid() ... child1 { 
kill(child2) } 
+1

我注意到我的Linux系統上的'wait(2)'手冊頁包含了一個如何使用'waitpid()'系統調用的實例。 – larsks

+0

我想你可以很容易地找到答案,通過在SO上搜索'[E] waitpid';通過搜索'[c] [waitpid]'而不那麼容易。我已經用第一次搜索回答了48個問題,第二次回答了5個問題,而我絕不是唯一回答這些問題的人。 –

回答

13

語法的waitpid()

pid_t waitpid(pid_t pid, int *status, int options); 

pid的值可以是:

  • < -1:等待任何子進程,其進程組ID等於絕對值爲pid
  • -1:等待任何子進程。
  • :等待任何子進程,其進程組ID等於調用進程的進程組ID。
  • > 0:等待進程ID等於pid的值的孩子。

選項的值是以下常量零以上的OR:

  • WNOHANG:立即返回,如果沒有孩子已退出。
  • WUNTRACED:如果孩子已停止,也返回。即使未指定此選項,也會提供已停止的跟蹤孩子的狀態。
  • WCONTINUED:如果停止的孩子已通過SIGCONT的遞送恢復,也返回。

如需更多幫助,請使用man waitpid

+2

https://support.sas.com/documentation/onlinedoc/sasc/doc/lr2/waitpid.htm通過一個示例提供了更詳細的信息。我個人仍然不明白如何有效地從這個問題的2個答案中使用waitpid。 –

9

語法

pid_t waitpid(pid_t pid, int *statusPtr, int options); 

1.where pid是孩子應該等待的過程。

2.statusPtr是指向終止進程的狀態信息將被存儲的位置的指針。

3.指定waitpid函數的可選操作。以下任一選項標誌可以被指定,或者它們可與按位或運算符被組合:

WNOHANG WUNTRACED WCONTINUED

如果成功,waitpid函數返回終止過程,其的進程ID狀態被報告。如果不成功,則返回-1。

典型應用該類超支了等待

1。waitpid函數可以使用,當你有一個以上的孩子的過程中,你要等特定的孩子得到它的執行完成父恢復

2.waitpid之前支持作業控制

3.it支持非阻塞父進程