進程的等待
#include <sys/types.h>
#include <sys/wait.h>
wait(),waitpid()區別:
- 在一個子進程終止前,wait使其調用者阻塞,而waitpid有一個選項,可使調用者不阻塞;
- waitpid()并不等待在其調用之后的第一個終止的子進程,它有若干個選項,可以控制它所等待的進程;
wait()
pid_t wait(int *status);
返回值:
成功 | 成功結束運行的子進程的進程號 |
---|---|
失敗 | 返回-1 |
參數:
- 參數status如果不是一個空指針,則終止進程的終止狀態就存放在statloc所指向的單元。
- 參數status如果是一個空指針,則表示父進程不關心子進程的終止狀態
waitpid()
pid_t waitpid(pid_t pid, int *status, int options);
參數:
pid>0 | 只等待進程ID等于pid的子進程,不管其它已經有多少子進程運行結束退出了,只要指定的子進程還沒有結束,waitpid就會一直等下去。 |
---|---|
pid=-1 | 等待任何一個子進程退出,沒有任何限制,此時waitpid和wait的作用一模一樣。 |
pid=0時 | 等待同一個進程組中的任何子進程,如果子進程已經加入了別的進程組,waitpid不會對它做任何理睬。 |
pid<-1 | 等待一個指定進程組中的任何子進程,這個進程組的ID等于pid的絕對值。 |
* 參數status如果不是一個空指針,則終止進程的終止狀態就存放在status所指向的單元。
* 參數status如果是一個空指針,則表示父進程不關心子進程的終止狀態
option
WNOHANG | 若由pid指定的子進程未發生狀態改變(沒有結束),則waitpid()不阻塞,立即返回0 |
---|---|
WUNTRACED | 返回終止子進程信息和因信號停止的子進程信息 |
WCONTINUED | 返回收到SIGCONT信號而恢復執行的已停止子進程狀態信息 |
返回值:
成功 | 成功結束運行的子進程的進程號 |
---|---|
失敗 | 返回-1 |
WNOHANG | 沒有子進程退出返回0 |