【问题标题】:Detaching chained commands called with system()分离用 system() 调用的链式命令
【发布时间】: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


【解决方案1】:

是的,在末尾添加一个 & 将使 system() 立即返回。

【讨论】:

    猜你喜欢
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多