gpt4 book ai didi

C++: system(0) 返回 0

转载 作者:搜寻专家 更新时间:2023-10-31 01:16:29 25 4
gpt4 key购买 nike

当我调用 system(0) 时,它返回 0,这意味着 shell 不可用

当使用 system 的命令(调用 gcc 编译 hello world 程序)时,它工作正常但返回 -1(我假设它与 system(0) 的原因相同 返回 0)。是什么导致它“不可用”?为什么它仍然有效?

编译器:gcc 版本 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

操作系统:Ubuntu 11.10

编辑

Errno 表示没有子进程

我还编译了另一个测试程序,它只调用 system(0) 并返回非零值。它会受到 Code::Blocks 的影响吗?

编辑

到目前为止,我发现 system(0) 只有在我启动第一个 pthread 后才会失败。

已解决

我在早期实现这段代码之一时使用了 fork:

signal(SIGCHLD,SIG_IGN);

我用它来“处理”僵尸。我刚刚发现这是导致错误的原因。

最佳答案

如果您使用如下代码忽略 SIGCHLD 信号,就会发生这种情况:

signal(SIGCHLD, SIG_IGN);

这会导致 system 在所有子级结束时返回 -1,将 errno 设置为 ECHILD

引用http://pubs.opengroup.org/onlinepubs/009695399/functions/wait.html .具体来说:

If the calling process has SA_NOCLDWAIT set or has SIGCHLD set to SIG_IGN, and the process has no unwaited-for children that were transformed into zombie processes, the calling thread shall block until all of the children of the process containing the calling thread terminate, and wait() and waitpid() shall fail and set errno to [ECHILD].

关于C++: system(0) 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9080311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com