当我等待作为子进程的特定运行进程组时,WIFEXITED 返回 true 表示进程退出?这是它的工作方式吗?似乎有什么我不明白的......
if ( waitpid(-pgid, &pstatus, WUNTRACED|WNOHANG ) == -1)
perror("Wait error");
if ( WIFEXITED(pstatus) ) {
strncpy(buf, "Exited", buf_size);
return 0;
当我等待作为子进程的特定运行进程组时,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
无法使用更新的数据。
如果
WNOHANG
已指定且存在指定的一个或多个子项pid
,但尚未更改状态,则0
返回。
waitpid
如果成功收割一个孩子,则返回收割的孩子 pid。与 一起使用时WNOHANG
,如果没有孩子退出,它会立即返回 0。因此,您需要在检查之前检查返回值是 0 还是 pid status
。有关详细信息,请参见此处:
http://pubs.opengroup.org/onlinepubs/9699919799/functions/waitpid.html