一步一步学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系统调用对于等待哪个子进程状态改变提供了更精确的控制。

 

  • 1
  • 2
  • 下一页

相关内容