当我等待作为子进程的特定运行进程组时,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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top