察看wait()的失败

问题描述:

为了知道是否等待()工作过,会是正确的,以检查它像下面?从理论上讲,如果等待()不会失败,应该返回到父进程结束的孩子PID,否则父PID为1,对不对?察看wait()的失败

switch (process = fork()) 
{ 
    case -1: 
     // Fork fail 
     perror("Fork failed"); 
     exit(EXIT_FAILURE); 

    case 0: 
     //Child process 
     HERE CODE DOES SOMETHING 
     exit(EXIT_SUCCESS); 
    default: 
     //Parent process 
     pid=wait(&status); 

     if(pid==1){ 
      perror("Wait failed"); 
     }else{ 
     exit(EXIT_SUCCESS); 
     } 
} 
+1

阅读函数的文档主要是帮助:http://man7.org/linux/man-pages/man2/waitpid.2 html的 – alk

+1

除此之外'wait'返回-1,而不是1的错误,这是包含在现有的答案的情况下,可以考虑使用'waitpid',以确保您正在等待你只是派生的过程,而不是事实第一个子进程发生退出(可能会被分离出来,或者被另一个线程分离)。此外,这是一个好主意,调用'_exit',而不是'exit',以防止子进程继承了父母的stdip缓冲区无意冲洗。 – user4815162342

+1

@ user4815162342谢谢。 – krm

引用

man 2 wait

返回值

等待():成功,则返回终止子的进程ID; 上 错误,则返回-1

所以要检查是否wait(2)失败,这已经足够了:

if (wait(&status) == -1) { 
    perror("wait failed"); 
    exit(1); 
} 
+0

更好地利用这个http://man7.org/linux/man-pages/man2/waitpid.2.html以供参考。它更准确,更新,更少。 – alk