WIFEXITED为什么会在运行过程中返回True?

时间:2009-10-29 11:58:02

标签: c system-calls

当我等待作为子进程的特定运行进程组时,WIFEXITED返回true表示该进程已退出?这是它的工作方式吗?似乎有些东西我不理解......

if ( waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG ) == -1)
    perror("Wait error");

if ( WIFEXITED(pstatus) ) {
    strncpy(buf,  "Exited", buf_size);
    return 0;

2 个答案:

答案 0 :(得分:6)

正如您指定的WNOHANG我认为waitpid正在返回0pstatus具有之前的值,因此WIFEXITED无法使用更新的数据。

  

如果指定了WNOHANG且一个或多个孩子(ren)   由pid指定,但尚未改变状态,   然后返回0

答案 1 :(得分:1)

waitpid如果成功收获孩子,则会返回收到的子pid。与WNOHANG一起使用时,如果没有孩子退出,它会立即返回0。因此,在检查status之前,需要检查返回值是0还是pid。有关详细信息,请参见此处:

http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html