微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

WIFEXITED在什么情况下返回false?

如何解决WIFEXITED在什么情况下返回false?

我按照 var /*this.*/speakers = new Map(); // ... if (! speakers.has('speakerId-17')) { speakers.set('speakerId-17',{ 'last':'Smith','first':'John','jobTitle':'Guru','company':'Acme Corp' } ); } documentation 说明可以使用 std::systemWEXITSTATUS 分解返回值

根据https://pubs.opengroup.org/onlinepubs/9699919799/functions/wait.html,这可以如下完成:

WSTOPSIG

我使用 if (WIFEXITED(status)) { printf("child exited,status=%d\n",WEXITSTATUS(status)); } else if (WIFSIGNALED(status)) { printf("child killed (signal %d)\n",WTERMSIG(status)); } else if (WIFSTOPPED(status)) { printf("child stopped (signal %d)\n",WSTOPSIG(status)); } 从另一个 C++ 程序中执行以下两个 C++ 程序:

std::system

int main()
{
    throw;
}

对于第一个程序,它将中止第二个未捕获的异常,但在返回的状态上调用 int main() { // Run forever until killed while(1); } 仍然返回 true,即使程序在中途中止。

对于第二个程序,它无限期地运行,直到我用 WIFEXITED(status) 杀死它,此时 kill <pid> 调用将返回一个状态。但即使在这种情况下,std::system 也会返回 true 并跳过 WIFEXITED(status) 语句。

我原以为这两种情况都会返回“false”并陷入 else if 语句以进一步处理状态,但事实并非如此。

在什么情况下else if会返回false?如何编写测试程序来执行子流程并强制返回错误状态以便输入其他 WIFEXITED(status) 语句之一?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。