信号的理解:
1.信号的本质是什么???
:::
: 信号的本质时一个整数,unix用一个整数来标示一个事件
2.信号与内核是什么关系???
请分析下面一段话:摘自《操作系统原理 技术 与编程》
“
从用户的角度看,只要调用了系统调用kill()就可以发送信号,此调用号只需要目标进程PID和一个信号SIG共两个参数就可以了。
而系统调用kill()是通过调用内核函数,sys_kill()来完成信号的发送的
不管信号来自哪里,内核最后总是通过直接或间接调用内核函数,来完成发送信号的任务。
举个例子: A进程向B进程发送一个信号。
A进程通过系统调用,把待发送的信号,和目的进程的pid传递给内核,内核收到之后,就调用内核函数把自己得到的信号
发送给进程号为目标进程的进程B.
”
要点: 信号的发送和接收实际上是同一个过程,它的实质是发送进程(或内核)通过相关的系统调用更新目标进程进程结构体中接收到信号的队列。
即:所谓的发送:就是要将要发送的信号的编号写入目标进程的进程结构体的signal域中。
3.信号与进程是什么关系???? 信号是怎样和进程联系在一起的????
要点: 1。在进程控制块中,所包含的下列成员用来跟踪发送给进程的信号。
2.进程结构体中与信号有关的成员:
struct signal_struct *sig;
sigset_t signal,blocked;
struct signal_queue *sigqueue,**sigqueue_tail;
int sigpending;
其中:
sig是一个指向signal_struct 结构体的指针,该结构体中存放处理该信号的各种数据结构以及指向信号处理函数的指针。
1.信号的本质是什么???
:::
: 信号的本质时一个整数,unix用一个整数来标示一个事件
2.信号与内核是什么关系???
请分析下面一段话:摘自《操作系统原理 技术 与编程》
“
从用户的角度看,只要调用了系统调用kill()就可以发送信号,此调用号只需要目标进程PID和一个信号SIG共两个参数就可以了。
而系统调用kill()是通过调用内核函数,sys_kill()来完成信号的发送的
不管信号来自哪里,内核最后总是通过直接或间接调用内核函数,来完成发送信号的任务。
举个例子: A进程向B进程发送一个信号。
A进程通过系统调用,把待发送的信号,和目的进程的pid传递给内核,内核收到之后,就调用内核函数把自己得到的信号
发送给进程号为目标进程的进程B.
”
要点: 信号的发送和接收实际上是同一个过程,它的实质是发送进程(或内核)通过相关的系统调用更新目标进程进程结构体中接收到信号的队列。
即:所谓的发送:就是要将要发送的信号的编号写入目标进程的进程结构体的signal域中。
3.信号与进程是什么关系???? 信号是怎样和进程联系在一起的????
要点: 1。在进程控制块中,所包含的下列成员用来跟踪发送给进程的信号。
2.进程结构体中与信号有关的成员:
struct signal_struct *sig;
sigset_t signal,blocked;
struct signal_queue *sigqueue,**sigqueue_tail;
int sigpending;
其中:
sig是一个指向signal_struct 结构体的指针,该结构体中存放处理该信号的各种数据结构以及指向信号处理函数的指针。