2014-02-28 25 views
1

我有一個關於waitpid參數的問題。 當p [0]完成時,我應該啓動p [1](進程1)。waitpid()參數

這是開始P0:

if(p[0] == 0){ 
    process(0,1); //(process, duration(time)) 
    return 0; 
} 

現在我要爲P0端(後1秒)

if(p[1] == 0){ 
    process(1,2); 
    return 0; 
} 
waitpid(p[0], NULL, 0); 

我的問題是P1儘快啓動:什麼waitpid函數做參數意思?應該將最後一個參數設置爲1,因爲p [0]在1秒後結束,這是我希望p [1]開始的時間?

+0

請仔細閱讀精美手冊:http://man7.org/linux/man-pages/man2/wait.2.html – alk

回答

1

它通常用於根據進程ID(也稱爲pid)等待某個特定進程完成(或以其他方式更改狀態(如果使用特殊標誌)。

它也可用於等待任何一組子進程,其中一個來自特定進程組或當前進程的任何子進程。

例如

pid_t child_pid; 
int status; 

child_pid = fork(); 

if (child_pid == 0) { 
    // in child; do stuff including perhaps exec 
} else if (child_pid == -1) { 
    // failed to fork 
} else { 
    if (waitpid(child_pid, &status, 0) == child_pid) { 
      // child exited or interrupted; now you can do something with status 
    } else { 
      // error etc 
    } 
} 

沒有關於waitpid對參數如下

第一個參數:將爲pid_t PID

它是過程的,你等待的過程中PID退出

第二個參數:int * status

它是在程序的當前狀態,您可以使用宏來測試每個條件,如WIFEXITED,WIFSIGNALED

第三個參數:INT選項

選項參數應該是0.你不需要實現任何選項。 (但是,您的系統應該檢查以確保您不支持的選項不被請求。)

0

waitpid中的參數意味着什麼?

您可以查看waitpid(3)手冊的參數含義。

最後一個參數應該設置爲1,因爲p [0]在1秒後結束,這是我希望p [1]開始的時間?

爲了實現自己的目標,儘快啓動進程1的進程0結束時,你應該把waitpid(...);語句用來創建進程1的fork()之前,在你的電話使用權參數waitpid()

1

的完整文檔,在手冊頁或瀏覽:http://linux.die.net/man/2/waitpid

基本上你有3個參數:

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

pid是你在等待的過程。除非您正在等待多個孩子(在這種情況下,指定0,-1或小於-1的數字 - 聯機幫助頁中的詳細信息),請在此處指定您的過程的pid

status是一個指向將用退出狀態填充的整數的指針。這是流程退出狀態和它如何退出(或沒有退出)的說明的組合。該手冊頁提供了可用於理解這一點的宏。

options可以用多個標記or一起填寫。其中最有用的是有點奇怪的W_NOHANG,這使得waitpid只是告訴你該過程是否已完成(如果是的話,它的退出狀態是什麼),而不是等待它完成。