在后台启动程序

时间:2013-07-23 10:40:39

标签: c++ multithreading unix execution

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

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

1 个答案:

答案 0 :(得分:1)

实际上你可以使用线程:)但要小心...... 在生成父/所有进程/ es中的任何线程之前执行fork 的最简单方法。然后,在fork之后,你可以开始任何需要的线程(你想要的任何地方:在父进程和子进程中)。

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

PS:如果你真的需要孩子的一些主题,也可以阅读man pthread_atfork