使用C,Linux中的信号进行进程间同步
收藏

处理一个分叉,比如说4个子进程。exec()用于替换子级的代码。子项初始化,并且必须等待父项创建它们中的所有4个。
然后父进程向每个子进程发送一个sigusr1,以便它们开始处理。父进程等待所有子进程完成。当孩子完成工作时,它会向家长发送一个sigusr2。当父进程接收到所有sigusr2信号时,它继续执行,合并子进程的计算。
这是一个大学练习,课堂上有人说,过程A(家长)会失去一些信号,所以我们被告知只需要孩子信号的一部分才能成功接收。
我想达到100%。在另一种情况下,pause()和循环是否有效?


最佳答案:

如果使用标准signal()方法,如果许多孩子在很短的时间内发送相同的信号,进程a可能会丢失一些信号。如果您正在处理一个信号并在此期间接收同一个信号,则会丢失第二个信号(更准确地说,它将被默认信号处理程序捕获)。
如果您决定使用sigaction(),您将能够捕获发送到进程的所有信号。

    公众号
    关注公众号订阅更多技术干货!