理解进程信号

进程信号
一,什么是信号
信号就是一种软件中断,打断当前正在运行的进程,让该进程去处理信号的事件。

二,信号种类
一共有62种信号,1-31为不可靠信号,34-64为可靠信号。

三,信号的产生
硬件产生:
ctrl+c:给前台进程发送一个SIGINT,中断当前的前台进程。
ctrl+z:SIGSTP信号,使进程暂停。
ctrl+|(竖线):SIGQUIT信号,使进程崩溃,并产生coredump文件
软件产生:
kill [pid] :给进程发送SIGTERM信号
kill -9 [pid] :给进程发送SIGKILL信号
函数产生:
kill函数 :kill(pid_t pid ,int signo);
abort函数,谁调用谁退出,SIGABRT信号
alarm定时器函数 :alarm(int sec)SIGALRM信号

四,信号的注册
在这里插入图片描述(1)非可靠信号的注册(1-31)
1,更改sig位图当中对应的比特位为1,在sigqueue队列当中增加对应信号所对应的节点。
2,当多次收到同一个信号的时候,只添加一次节点,也就是说,在第二次收到同样信号的时候,不往队列中添加相同信号的节点。
在这里插入图片描述
(2)可靠信号的注册(34-64)
1,更改sig位图当中对应的比特位为1,在sigqueue队列当中增加对应信号所对应的节点。
2,当多次收到同一个信号的时候,先判断sig位图当中的比特位是否为1,并且在sigqueue队列中增加对应信号对应的节点。

五,信号注销
(1)非可靠信号的注销
将sig位图当中对应信号的比特位置为0,并且将sigqueue队列当中的节点去除掉
(2)可靠信号的注销
将sigqueue队列中该信号对应的节点进行计算,看是否大于1,如果大于,则说明在该队列中海油同类型的节点,则不改变sig位图的比特位,只去掉该节点,如果为1,则去掉该节点并将位图对应的信号的比特位置为0。

六,信号的处理方式
在这里插入图片描述
这时候我们就知道为什么会产生一个僵尸进程:也就是父进程为什么来不及回收子进程的退出信息就会导致僵尸状态,这是因为子进程在退出的时候,会给父进程发送一个SIGCHID信号,而操作系统对SIGCHID信号的处理方式为忽略处理。

猜你喜欢

转载自blog.csdn.net/weixin_44930562/article/details/107786850