歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

一步一步學Linux C:關於進程等待

  1. #include <sys/types.h>   
  2. #include <stdio.h>   
  3. #include <sys/wait.h>   
  4.   
  5. void check_exit(int status);  
  6.   
  7. main()  
  8. {  
  9.     pid_t pid;  
  10.     int status;  
  11.     if((pid = fork()) < 0)  
  12.     {  
  13.     printf("fork error!!\n");  
  14.     exit(0);  
  15.     }  
  16.     else if(pid == 0)  
  17.     {  
  18.     printf("child process exit\n");  
  19.     exit(0);  
  20.     }  
  21.     else  
  22.     {  
  23.         if(wait(&status) != pid)  
  24.         {  
  25.         printf("wait error!!");  
  26.         exit(0);  
  27.         }  
  28.         check_exit(status);  
  29.     }  
  30.   
  31. }  
  32. void check_exit(int status)  
  33. {  
  34.     if(WIFEXITED(status))  
  35.         printf("eixt\n");  
  36.       
  37.     else if(WIFSIGNALED(status))  
  38.         printf("killed by signal\n");  
  39.     else if(WIFSTOPPED(status))  
  40.         printf("stopped by signal\n");  
  41.     else if(WIFCONTINUED(status))  
  42.         printf("continued");  
  43. }  

等待進程改變其狀態。所有下面哪些調用都被用於等待子進程狀態的改 變,獲取狀態已改變的子進程信息。狀態改變可被認為是:1.子進程已終止。2.信號導致子進程停止執行。3.信號恢復子進程的執行。在子進程終止的情況 下,wait調用將允許系統釋放與子進程關聯的資源。如果不執行wait,終止了的子進程會停留在"zombie"狀態。

如果發現子進程改變了狀態,這些調用會立即返回。反之,調用會被阻塞直到子進程狀態改變,或者由信號處理句柄所中斷(假如系統調用沒有通過sigaction的SA_RESTART標志重啟動)。

wait 系統調用掛起當前執行中的進程,直到它的一個子進程終止。waitpid掛起當前進程的執行,直到指定的子進程狀態發生變化。默認,waitpid只等待 終止狀態的子進程,但這種行為可通過選項來改變。waitid系統調用對於等待哪個子進程狀態改變提供了更精確的控制。

 

Copyright © Linux教程網 All Rights Reserved