Perl的 - 用叉子/ exec'ed进程通信(Perl - Communicating

2019-10-17 12:41发布

我设计将由 / EXEC初始化“荷兰国际集团四‘经理人’(自己的服务器进程),然后将接受来自客户端, / EXEC连接” ing‘的奴隶’与客户端进行通信的服务器。 在他们的一生中,从机将建立与管理器的连接,并把他们的工作要求。

我的问题是关于启动的经理。 每一个可能需要一些时间进行初始化(分钟),我不希望在主服务器继续接受客户,直到他们已经初始化。 什么是做到这一点的最好方法是什么? 我应该探索具有管理信号的主服务器时,他们准备好了吗? 我应该有管理者做出的套接字连接到主 - 可能是一个不同的端口上比一个客户端连接 - 准备就绪时发送邮件? 或者是其他东西?

Answer 1:

我会很动心分叉对开四个管理者之前创建一个管道。 当经理是准备好了,它可以写在管道上的PID并关闭它。 主服务器可延缓其打开监听端口,直到管理人员中至少一个表明它已准备就绪。 如果从管道得到EOF之前的所有管理人员报告准备现役,那时它才知道经理的至少一个未能启动,并采取适当的措施(记录错误并退出?)。 写入到管消息通常处理的原子; 也就是说,如果消息是足够短,什么一个进程写入不会由另一个进程写入交错。

对于一些变化,你可以有每一个经理管; 那么你必须决定你如何去查询或选择哪个管有消息等待。 你可以决定经理并不表明他们已经准备好后,要关闭管道; 他们可以保持打开状态,后来就写一个合适的“PID准备”就绪的时候,和其他状态信息(“PID退出”,“PID太忙”,“PID采取咖啡休息”,...)。

有很多的可以使用的其他IPC机制,每一个都有自己的优点和缺点。 这在很大程度上取决于什么样的管理者需要传达给主(不论主需要与特定的管理人员进行交流)。 插座可用于确定; 因此可能消息队列。 如果您的通信需求很简单,一套信号灯可能会奏效。 而这样的例子不胜枚举。



Answer 2:

你在想什么是FIFO管道。 mknod的传统上用于创建它们。 该管道有2个文件描述符,一个用于读,一个用于写....,如果有必要,他们可以阻止上...



文章来源: Perl - Communicating with a fork/exec'ed process