2010-05-20 159 views
1

想知道如果可以在一个线程中执行另一个程序并将信息发送到/从中获取信息。本质上与子进程和使用管道进行通信的概念相同 - 但是我不想使用fork。在多线程程序中执行另一个程序

我似乎无法找到是否有可能做到这一点,任何帮助将不胜感激。

感谢

+0

不可能,至少如您所描述的那样。如果你告诉我们你为什么要这样做,也许我们可以帮助你想出一个解决方案。 – jdigital 2010-05-20 05:30:40

+0

你可以使用'popen()'异步执行一个进程。但是,您只能捕获已启动进程的stdin或stdout。它仍然在内部使用'fork()',但在Linux/Unix中它是启动一个新进程的唯一方法。如果你不想手动编写代码,可能有一些更高级别的库为你做了一切(pipe/fork/dup/exec)。 – petersohn 2012-11-28 08:26:51

回答

0

如果你不使用叉子(直接或间接),那么它是不是真的另一个进程。当然,你可以在一个进程内的线程之间进行通信。这对于大多数多线程来说至关重要。

2

您不能使用exec函数系列在线程中加载另一个可执行文件; exec函数用从可执行文件开始的进程替换整个进程。因此,如果您希望原始进程继续运行,则需要fork()

从理论上讲,您可以在用户空间中复制exec系统调用的大部分行为,并在线程中运行可执行文件 - 但由于线程将共享打开的文件表,信号处理程序等与其余的过程,它可能会破坏性地干扰主流程。这也将是很多工作。