【发布时间】:2014-10-20 18:39:25
【问题描述】:
我熟悉使用系统从 C 中执行 shell 命令,如下所示:
system("ifup -a\n");
并使用 & 号分叉它们(因此 system() 调用立即返回):
system("ifup -a &\n");
并使用双与号一个接一个地链接两个命令:
system("ifdown eth0 && ifup -a\n");
但是,在链的末尾添加一个与号是否会运行整个链并让 system() 调用立即返回?例如:
system("ifdown eth0 && ifup -a &\n");
单个 & 符号是分叉整行还是只分叉最后一个命令?
或者有没有更好的方法来实现这一点?我们似乎有一个挑剔的网络情况,需要这样做:
system("ifdown eth0 && sleep 2 && ifup -a &\n");
为了让事情有时间完全下来和再次完全起来,但调用函数真的想立即返回。
【问题讨论】:
-
是的,而且很容易测试,你应该自己做,而不是问问题。
-
@pelya - 我意识到我可以测试它,但是如果它是记录在案的行为而不是仅仅“在这个特定的版本上为我工作”,或者是否有一些更优雅的东西,那就太好了或适当的解决方案,就像在 Linux 中经常出现的那样。
-
从'man system'开始,system()调用等价于fork()和execl("/bin/sh", "sh", "-c", command, (char *) 0);它应该在任何类 Unix 操作系统上以类似的方式工作。在 Windows 上没有那么多。
标签: c linux command-line exec