c++ - 在后台启动程序

标签 c++ multithreading unix execution

我一直在尝试在我的代码中的某个时刻启动和关闭一个外部程序,并且依靠 system() 调用来完成它。然而,here有人建议我完全使用 execlp 和一个单独的 std::thread 来抑制控制台输出。

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

最佳答案

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

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

PS:如果您真的需要子进程中的一些线程,还请阅读 man pthread_atfork

关于c++ - 在后台启动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17807852/

相关文章:

c++ - 是否必须包含 header <iterator> 才能使用 begin 和 end 函数?

c++ - 共享内存线程和 MPI 之间的主要区别?

java - 如何在 IntelliJ 中调试多线程应用程序?

c++ - 执行 int 3 中断会停止 Linux 上的整个进程还是仅停止当前线程?

linux - 在Linux CLI中按位置替换特定行上的特定字符

linux - 终端输出异常

linux - 使用 csvfix for linux 对数值进行排序 - 将数字转换为字符串

C++ stringstream将固定长度的字符串读取到char数组

c++ - 从模板类定义非模板类

c++ - NMAKE : fatal error U1077: cl. exe 和 nmake.exe 返回代码 '0x2'