【问题标题】:Why Would WIFEXITED Return True on Running Process?为什么WIFEXITED会在运行过程中返回True?
【发布时间】:2010-12-11 05:19:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: c system-calls


    【解决方案1】:

    waitpid 如果成功收割子进程,则返回收割子进程 pid。当与WNOHANG 一起使用时,如果没有子级退出,它会立即返回 0。因此,在检查status 之前,您需要检查返回值是 0 还是 pid。详情请看这里:

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

    【讨论】:

      【解决方案2】:

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

      如果指定了WNOHANG 并且有一个或多个孩子(ren) pid 指定的存在,但尚未改变状态, 然后返回0

      【讨论】:

      • 啊,我确实重新初始化为 0,但现在我有点明白了。但我不太明白如何判断某事是否仍在运行或是否退出(没有阻塞)。
      • 如果您的任何孩子改变了状态(死亡),waitpid 将返回一个正数。
      • 哦我现在明白了...我需要同时获取返回值和状态值来获取进程的状态。 (返回值不仅仅是错误与否)。谢谢!
      • 妻子离开了,孩子们因震惊而死亡。
      • @James Morris:我以为妻子很兴奋孩子们还活着……
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2019-12-07
      相关资源
      最近更新 更多