簡體   English   中英

Perl-與fork / exec'd進程進行通信

[英]Perl - Communicating with a fork/exec'ed process

我正在設計一個服務器,該服務器將通過fork / exec'ing四個“ manager”(自己的服務器進程)進行初始化,然后接受來自客戶端的連接,而fork / exec'ing “ slave”與客戶端進行通信。 在他們的一生中,奴隸將與管理者建立聯系並向他們發送工作請求。

我的問題是關於啟動經理。 每個人可能要花一些時間進行初始化(分鍾),我不希望主服務器在初始化之前繼續接受客戶端。 最好的方法是什么? 我是否應該探索讓經理在准備就緒時向主服務器發出信號? 我是否應該讓管理人員與主服務器建立套接字連接(可能與客戶端連接的端口不同),並在准備好后發送消息? 或者是其他東西?

在分派四位經理之前,我很想創建一個管道。 管理器准備就緒后,可以將其PID寫入管道並關閉。 主服務器可以延遲打開其偵聽端口,直到至少一個管理器指示它准備就緒為止。 如果在所有管理人員都報告准備好就職前從管道中獲得EOF,則它知道至少一名管理人員無法啟動,並且可以采取適當的措施(日志錯誤並退出?)。 寫入管道的消息通常被原子處理。 也就是說,如果消息足夠短,則一個進程寫的內容將不會與另一進程寫的內容交錯。

對於某些變化,每個經理可以有一個管道。 那么您必須決定如何輪詢或選擇哪個管道等待消息。 您可以在指示管理人員准備就緒后決定不關閉管道。 他們可以保持打開狀態,並在准備就緒時編寫適當的“ PID准備就緒”,以及稍后的其他狀態消息(“ PID退出”,“ PID太忙”,“ PID喝咖啡休息”等)。

可以使用許多其他IPC機制,每種機制都有其自己的優點和缺點。 在很大程度上取決於管理者需要與主控者進行通信的內容(以及主控者是否需要與特定管理者進行通信)。 可以肯定使用套接字。 消息隊列也可以。 如果您的通信需求很簡單,則可以使用信號燈集。 而這樣的例子不勝枚舉。

您在想的是FIFO管道。 傳統上, mknod用於創建它們。 管道有2個文件描述符,一個用於讀取,一個用於寫入...。如果有必要,它們可以阻止...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM