一、实现要求
二、实现思路
大致结构:
信号绑定函数(触发函数)如下
确定A\B\C\D四个进程的关系是父子关系:A fork B、B fork C、C fork D(或者A是父亲,BCD都是A的孩子;再或者main函数是父亲,ABCD是兄弟也可以)
此时D就是A的重孙子,可以看出B、C既有父亲也有孩子;A有孩子没有父亲;D有父亲没有孩子。那么怎么区分B、C呢?因为触发函数中有num(收到的信号编号),B、C收到的信号不同,所以可以根据num判断(num为10表示信号SIGUSER1判断是B进程、num为12判断是C进程,注意不能直接判断num是否等于12,因为可能是C也可能是A)
可以区分A\B\C\D四个进程,接下来就好办了。用两个变量存四个进程的父亲或者孩子,比如A有孩子没有父亲,只要存孩子的pid。B、C有孩子都要存孩子pid(因为发送都是针对孩子),D有父亲没有孩子存父亲pid。接着写一个信号绑定函数即可实现
绑定和发送信号
- 绑定信号sigaction,在fork之前(注意不能放在进程开始之前,否则4个进程都会有4个信号,第一,会产生信号冲突,还要进行信号屏蔽;第二,会占用更多内存空间,即A进程也会认识信号SIGRTMIN等,其实没有意义)
- 发送信号sigqueue
三、代码