我一直在尝试在我的代码中的某个时刻启动和关闭一个外部程序,并且依靠 system()
调用来完成它。然而,here有人建议我完全使用 execlp
和一个单独的 std::thread
来抑制控制台输出。
问题是,这两种解决方案都意味着等待程序关闭,我想避免这种情况,因为我需要与该程序通信(现在通过 UNIX 套接字)。有什么方法可以使用 execlp
或 std::thread
在后台启动程序,就像我使用 system([program]&)
?
最佳答案
实际上你可以使用线程 :) 但要小心...
fork
before 在父进程/所有进程/es 中生成任何线程的最简单方法。然后,在 fork
之后,您可以启动任何需要的线程(在您想要的任何地方:在父进程和子进程中)。
执行 fork
子进程中没有自动启动的线程,但我想你不需要它们......子进程通常会做一些准备工作并且需要 exec
进程,因此您不需要在其中重新生成任何线程。 (无论如何,如果你愿意,你可以做到!)。然后,您必须通过 waitpid
监视您的 child 并等待它死亡。
PS:如果您真的需要子进程中的一些线程,还请阅读 man pthread_atfork
。
关于c++ - 在后台启动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807852/