1. 信号量
- 每个task_struct里面都包含有signal_struct这个类型的指针。
- 而signal_stuct里面又包含了struct sigpending这个结构。
- struct sigpending里面就是一个链表。 这里链表上面,正是挂着该进程(线程),收到的信号。
2. 发送信号的过程
- 发送信号是通过kill函数,即SYSCALL_DEFINE2(kill 来实现的。
- 这个函数调用了一个关键的kill_something_info函数来处理。
- kill_something_info又调用了其他函数来进行处理,处理的关键就在于
-
- 找到进程号对应的进程结构
- 将信号挂到对应的进程的struct上面去。