- #include <sys/types.h>
- #include <stdio.h>
- #include <sys/wait.h>
-
- void check_exit(int status);
-
- main()
- {
- pid_t pid;
- int status;
- if((pid = fork()) < 0)
- {
- printf("fork error!!\n");
- exit(0);
- }
- else if(pid == 0)
- {
- printf("child process exit\n");
- exit(0);
- }
- else
- {
- if(wait(&status) != pid)
- {
- printf("wait error!!");
- exit(0);
- }
- check_exit(status);
- }
-
- }
- void check_exit(int status)
- {
- if(WIFEXITED(status))
- printf("eixt\n");
-
- else if(WIFSIGNALED(status))
- printf("killed by signal\n");
- else if(WIFSTOPPED(status))
- printf("stopped by signal\n");
- else if(WIFCONTINUED(status))
- printf("continued");
- }
等待進程改變其狀態。所有下面哪些調用都被用於等待子進程狀態的改 變,獲取狀態已改變的子進程信息。狀態改變可被認為是:1.子進程已終止。2.信號導致子進程停止執行。3.信號恢復子進程的執行。在子進程終止的情況 下,wait調用將允許系統釋放與子進程關聯的資源。如果不執行wait,終止了的子進程會停留在"zombie"狀態。
如果發現子進程改變了狀態,這些調用會立即返回。反之,調用會被阻塞直到子進程狀態改變,或者由信號處理句柄所中斷(假如系統調用沒有通過sigaction的SA_RESTART標志重啟動)。
wait 系統調用掛起當前執行中的進程,直到它的一個子進程終止。waitpid掛起當前進程的執行,直到指定的子進程狀態發生變化。默認,waitpid只等待 終止狀態的子進程,但這種行為可通過選項來改變。waitid系統調用對於等待哪個子進程狀態改變提供了更精確的控制。