[英]Interprocess synchronization using signals in c, linux
进程 A 分叉说 4 个子进程。 exec() 用于替换子代的代码。 孩子们初始化并且必须等待父母创建所有 4 个。
然后父进程向每个子进程发送一个 sigusr1 以便它们开始处理。 父母等待所有孩子完成处理。 当一个孩子完成它的工作时,它会向父母发送一个 sigusr2。 当父进程收到所有 sigusr2 信号时,它会继续执行,合并子进程的计算。
这是一个大学练习,在 class 中指出进程 A(父进程)会丢失一些信号,因此我们被告知只需要成功接收一定百分比的子进程信号。
我想达到100%。 在另一种情况下,暂停()和循环会起作用吗?
如果您使用标准的signal()
方法,如果许多孩子在很短的时间内向他发送相同的信号,则进程 A 可能会丢失一些信号。 如果您正在处理一个信号并在此期间接收同一个信号,您将丢失第二个(更准确地说,它将被默认信号处理程序捕获)。
如果您决定使用sigaction()
您将能够捕获发送到您的进程的所有信号。
您必须使用sigaction()
; 但是,您可能会再次丢失其中一些,因为:
信号没有排队。 子进程发送SIGUSR2
,如果它们同时发生,则只会传递其中一个。
最好的方法是使用sigqueue()
使用实时信号。
您将在父进程中使用信号警报和暂停,等待子进程生成警报信号,该信号破解暂停语句并同步它们。 .
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.