我一直在尝试在代码中的某个时刻启动并关闭外部程序,并且依靠system()
调用来实现这一目标。但是,here建议我完全使用execlp
和单独的std::thread
,以便抑制控制台输出。
问题是,这两个解决方案都意味着等待程序关闭,我想避免,因为我需要与该程序通信(现在通过UNIX套接字)。有没有办法使用execlp
或std::thread
在后台运行程序,就像我使用system([program]&)
一样?
答案 0 :(得分:1)
实际上你可以使用线程:)但要小心......
在生成父/所有进程/ es中的任何线程之前执行fork
的最简单方法。然后,在fork
之后,你可以开始任何需要的线程(你想要的任何地方:在父进程和子进程中)。
执行fork
在子进程中没有自动启动线程,但我想你不需要它们......孩子通常会做一些准备工作并exec
需要进程,所以你不要需要重新生成其中的任何线程。 (无论如何,如果你想,你可以做到!)。然后,你必须通过waitpid
观察你的孩子并等待它的死亡。
PS:如果你真的需要孩子的一些主题,也可以阅读man pthread_atfork
。