7

当我等待作为子进程的特定运行进程组时,WIFEXITED 返回 true 表示进程退出?这是它的工作方式吗?似乎有什么我不明白的......

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

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

2 回答 2

6

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

如果WNOHANG已指定且存在指定的一个或多个子项pid,但尚未更改状态,则0返回。

于 2009-10-29T12:17:48.677 回答
1

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

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

于 2011-02-03T08:07:32.897 回答