C++ 在后台启动程序

C++ 在后台启动程序,c++,multithreading,unix,execution,C++,Multithreading,Unix,Execution,在编写代码的过程中,我一直试图在某个时间点启动和关闭一个外部程序,并依靠system()调用来完成这一点。但是,有人建议我完全使用execlp和一个单独的std::thread,以抑制控制台输出 问题是,这两种解决方案都意味着等待程序关闭,我希望避免这种情况,因为我需要与该程序通信(现在通过UNIX套接字)。是否有任何方法可以使用execlp或std::thread在后台启动程序,就像我使用系统([program]&)一样?实际上你可以使用threads:)但要小心。。。 在父进程/所有进程/e

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


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

实际上你可以使用threads:)但要小心。。。 在父进程/所有进程/es中生成任何线程之前,执行
fork
的最简单方法。然后,在
fork
之后,您可以启动任何需要的线程(任意位置:在父进程和子进程中)

执行
fork
子进程中没有自动启动的线程,但我想您不需要它们。。。child通常会做一些准备工作,并执行所需的过程,所以您不需要重新启动其中的任何线程。(无论如何,如果你愿意,你可以做!)。然后,你必须通过
waitpid
观察你的孩子,等待他死


PS:如果您真的需要在孩子中使用一些线程,也可以阅读
manpthread\u atfork

当您使用
exec
函数系列时,您不能使用线程。您必须使用
fork
系统调用创建一个全新的流程。至于如何创建,互联网上有很多很多例子。在您喜爱的搜索引擎中进行简单搜索,您将发现数百个示例。