【问题标题】:Lauch a program in the background在后台启动程序
【发布时间】:2013-07-23 10:40:38
【问题描述】:

我一直在尝试在我的代码中的某个时间点启动和关闭一个外部程序,并且依靠system() 调用来实现这一点。但是,here 建议我完全使用execlp 和单独的std::thread,以抑制控制台输出。

问题是,这两种解决方案都意味着等待程序关闭,我想避免这种情况,因为我需要与该程序通信(现在通过 UNIX 套接字)。有什么方法可以使用execlpstd::thread 在后台启动程序,就像我使用system([program]&) 一样?

【问题讨论】:

  • 当您使用exec 系列函数时,您不能使用线程。您必须使用fork 系统调用创建一个全新的进程。
  • 至于怎么做,网上有很多,很多,例子。在您最喜欢的搜索引擎中进行简单搜索即可找到数百个示例。

标签: c++ multithreading unix execution


【解决方案1】:

实际上你可以使用线程 :) 但要小心... fork 在父/所有进程/es中产生任何线程的最简单方法。然后,在fork 之后,您可以启动任何需要的线程(您想要的任何地方:在父进程中以及在子进程中)。

fork子进程中没有自动启动线程,但我想你不需要它们......孩子通常会做一些准备,exec需要进程,所以你不需要重生里面的任何线程。 (无论如何,如果你愿意,你可以做到!)。然后,您必须通过waitpid 监视您的孩子并等待它的死亡。

PS:如果你真的需要孩子的一些线程,也请阅读man pthread_atfork

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-10
    • 2018-08-05
    相关资源
    最近更新 更多