2011-10-13 51 views
0

我有一個交互式程序,啓動成本很高。啓動後,我想將流程分成單獨的併發會話。理想情況下,每個單獨的會話將成爲一個GNU screen窗口,但能夠單獨telnet/ssh到每個會話也沒關係。如何分叉交互式程序

應該不會太難從頭開始寫這一點,但似乎喜歡的事,應該已經完成​​/前認爲,也許是有原因的,這是一個糟糕的主意......

我知道,另一種方法是使用共享內存來處理初始化代價高昂的數據。我不願走這條路的原因是共享數據使用帶有指針的C++數據結構,這使得很難將它映射到一個不相關的進程。

+0

更新:我編寫了一個Python庫的概念證明,它啓動一個Unix域套接字偵聽器,並在每個客戶端連接分支Python程序,將pty主fd通過套接字傳遞給客戶端;我還編寫了一個小型C客戶端,然後將pty主服務器fd連接到客戶端的控制檯。 – Hein

回答

0

這就是任何數據庫所做的 - 啓動成本非常昂貴,但是db提供了幾種不同的連接方式 - 例如Oracle的BEQ協議。

Telnet有問題,請考慮ssh。無論哪種方式,考慮一個守護進程,迴應端口連接請求(我猜你會使用AF_UNIX套接字),然後創建一個單獨的會話。

UNIX環境中的史蒂文斯高級編程或Rochkind的高級UNIX編程有討論和完整的例子。由於我的史蒂文斯書似乎已經過了大量的假期,請參閱Rochkind 4.3和4.10。

而且不,使用這種方法沒有懸而未決的厄運。