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 (将#修改为@)