【问题标题】:How to spawn a background program with execv如何使用 execv 生成后台程序
【发布时间】:2011-04-27 08:17:47
【问题描述】:

我正在使用 fork 和 execv 来生成子程序。如何让这些程序在后台运行?我试着不等待他们,但他们仍然将输出发送到屏幕。

【问题讨论】:

  • 你对“背景”的定义是什么?
  • 在后台运行一个进程和程序&是一回事。
  • 您的术语不一致 - program& 仍会将其输出写入屏幕,在这种情况下,“背景”只是释放 shell 提示符。 program > /dev/null& 会做你想做的事
  • 不,不会的。 top & 不会在屏幕上显示任何内容。

标签: c++ process fork execv


【解决方案1】:

在执行之前将 stdout/stderr 重定向到 /dev/null

freopen("/dev/null", "w", stdout);
freopen("/dev/null", "w", stderr);
exec....

【讨论】:

  • 我收到此错误:无法将参数 '2' 的 'FILE*' 转换为 'const char*' 到 'FILE* freopen(const char*, const char*, FILE*)'跨度>
  • @z-buffer:我交换了一些参数,现在更正了答案。
  • 输出如何恢复正常?
  • @z-buffer: “恢复正常”?如果要隐藏/丢弃输出,请将其重定向到 /dev/null 如上所述。 exec 将永远不会返回
【解决方案2】:

您可以使用管道重定向子进程的输出。看看thisqueston。有代码将 stdout 和 stderr 重定向到管道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-13
    • 2017-03-10
    • 2017-12-19
    相关资源
    最近更新 更多