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