当我等待作为子进程的特定运行进程组时,WIFEXITED返回true表示该进程已退出?这是它的工作方式吗?似乎有些东西我不理解......
if ( waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG ) == -1)
perror("Wait error");
if ( WIFEXITED(pstatus) ) {
strncpy(buf, "Exited", buf_size);
return 0;
答案 0 :(得分:6)
正如您指定的WNOHANG
我认为waitpid
正在返回0
而pstatus
具有之前的值,因此WIFEXITED
无法使用更新的数据。
如果指定了
WNOHANG
且一个或多个孩子(ren) 由pid
指定,但尚未改变状态, 然后返回0
。
答案 1 :(得分:1)
waitpid
如果成功收获孩子,则会返回收到的子pid。与WNOHANG
一起使用时,如果没有孩子退出,它会立即返回0。因此,在检查status
之前,需要检查返回值是0还是pid。有关详细信息,请参见此处:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html