2012-04-02 83 views
3

我目前正在尝试传递一个父进程,该进程应该对每个请求都有多个子进程,并且希望知道如何跟踪子进程的数量并检查是否有子进程已终止?父进程和多个子进程之间的通信

我曾尝试使用管道通过使用read()函数进行通信以发回终止消息。但是,这会以某种方式阻止所有并发性并等待1个子进程完成并在处理下一个进程请求之前发回终止消息。

有没有办法解决这个问题?或者我必须使用共享内存,套接字等方法......?

我正在使用C语言,我只需要一种方式来跟踪我有多少个孩子。我可以在父母程序中增加一个计数器,但是当一个孩子死亡?如何获取该消息并使用它来减少父项中的计数器?

+0

您使用哪种语言和/或框架? – 2012-04-02 05:35:16

+0

需要传达多少信息?沟通是双向的吗? – wallyk 2012-04-02 05:40:57

回答

2

在符合POSIX标准的平台上,如果您只想知道子进程何时退出而没有其他信息,则可以使用SIGCHLD信号。
SIGCHLD是当子进程终止时发送给进程的信号,您可以通过编写自己的信号处理程序来处理它。它的返回值是退出的子进程的进程ID。

如果您需要在程序执行过程中定期父子进程之间的通信,那么你将不得不使用某种Inter Process Mechanism(IPC),选择其中的取决于像性能,需要的要素数量同步,需要串行通信等。