2010-05-20 157 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系統調用的大部分行爲,並在線程中運行可執行文件 - 但由於線程將共享打開的文件表,信號處理程序等與其餘的過程,它可能會破壞性地干擾主流程。這也將是很多工作。