如何解决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::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 举报,一经查实,本站将立刻删除。