问题描述
我按照 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::system
和 WEXITSTATUS
分解返回值
根据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 (将#修改为@)