2013-01-04 76 views
0

我是新來與派生的工作,我有了解如何實現我想要什麼麻煩。我會盡力解釋。分岔並通過插座C++

我有方法A這是運行在Linux上的官能伯克利套接字服務器。

我需要過程A在後臺狀態從磁盤加載程序到一個單獨的無阻塞處理(處理B)。然後過程A需要傳遞過程A的套接字的過程B控制。最後過程A需要結束,使過程B運行。

我在什麼需要,如果舊的結束到插座傳遞到一個新的進程,並創建一個無阻塞的新工藝,使原來的進程結束的最好方式尚不清楚。

+0

是否在啓動B之前或之後獲取套接字? – Barmar

+0

我很好奇,如果有一種方法可以在進程之間共享文件句柄。但是讓我問一下:你是否考慮過將這兩個程序結合起來,並在兩個代碼路徑之間使用線程共享數據和套接字句柄?的 – selbie

+0

可能的複製問題: http://stackoverflow.com/questions/909064/portable-way-to-pass-file-descriptor-between-different-processes – selbie

回答

3

沒有什麼特別的,你需要做的。只要確保close on exec標誌被清除了,您希望進程B繼承的任何文件描述符,併爲您不希望進程B繼承的任何文件描述符進行設置。然後調用exec以將進程A替換爲進程B.進程B將從所有可繼承的文件描述符開始。

+0

而如何將b知道使用哪些文件描述符?你需要單獨傳遞這些信息。 – Barmar

+0

@Barmar:有幾個好方法。一是事先達成協議。例如,如果它只獲得一個TCP連接,可以認爲這將是文件描述符3.在調用exec之前,可以使用'dup2'來放置它。 (這是標準的進出和錯誤工作,對嗎?)另一種方法是使用B的命令行參數。 –

+0

我知道,這些是「你需要做的特殊事情」。我沒有時間寫答案,我試圖推動你改進答案。 – Barmar

0

如果您需要通過打開的文件(如套接字)而不使用繼承式分支,則可以使用ioctlI_SENDFDHere is a very detailed description。 (有一個相應的接收機制。)你可以使用一個命名管道來實現這一點,該管道將進程或變體與Unix域套接字連接起來。