【发布时间】:2012-02-23 05:13:14
【问题描述】:
当我调用 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);
我用它来“处理”僵尸。我刚刚发现这是导致错误的原因。
【问题讨论】:
-
@Paul : 使用参数
system调用0基本上是测试shell 是否可用。例如。 “如果 command 是空指针,system() 函数将判断宿主环境是否有命令处理器。” -
@Sander:谢谢-我不知道-我只是重新阅读了手册页,我发现您是对的!
-
@Paul,来自 system(3) 文档:“如果 command 的值为 NULL,则 system() 如果 shell 可用则返回非零值,否则返回零。”
-
@Pius :
errno在运行system(your_command)后设置为什么? -
用错误信息更新问题。