前言:回收子进程之前用了wait()和非阻塞模型,今天学了信号以后可以使回收机制更上一层楼,通过信号函数,父进程只需要做自己的事情,接收到信号后就触发信号函数。 信号处理函数可能会出现的bug: 1.受到停止信号也会触发SIGCHLD信号,使wait阻塞; 2.停止后继续也会触发信号,导致父进程阻塞 ...
分类:
其他好文 时间:
2018-04-24 20:25:51
阅读次数:
112
如果需要进程捕获某个信号,并作出相应的处理,就需要注册信号处理函数(其实就是内核里需要识别信号函数,类似C语言里的include某函数库)。 处理信号就类似软中断,内核为每个进程准备了一段信号向量表,记录信号的处理机制。当某个信号发生后,内核就会调用注册的函数去处理。 &
分类:
系统相关 时间:
2018-03-05 12:04:51
阅读次数:
198
本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信号的发送、屏蔽阻塞等,最后给了几个简单 ...
分类:
系统相关 时间:
2018-01-21 16:25:55
阅读次数:
204
定义: int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact); 表头文件: #include<signal.h> 说明: sigaction()会依参数signum指定的信号编号来设置该信号的处 ...
分类:
其他好文 时间:
2018-01-02 21:22:24
阅读次数:
146
这个服务器版本提供了accept返回EINTR错误继续执行的机制,保证了稳定性,而且其创建的子进程服务进程也会被正常的回收掉。 子进程结束会给父进程返回一个SIGCHID信号,父进程捕获到这个信号之后会执行信号处理函数,进行子进程的回收。 ...
分类:
系统相关 时间:
2017-11-17 19:55:01
阅读次数:
145
1.信号处理 2.信号处理函数 3.调用函数发送信号 杀死进程信号 向调用进程发送信号 4.暂停 5.睡眠 sleep(seconds) usleep 6.闹钟 alarm 7.信号集 填满信号集 清空信号集 加入信号 删除信号 判断信号是否在信号集中 8.信号屏蔽 信号掩码 获取调用进程的未决信号 ...
分类:
其他好文 时间:
2017-11-09 15:00:35
阅读次数:
165
一、pause(2)的使用 #include int pause(void); 功能:等待信号的到来 返回值: -1 错误 errno被设置 只有在信号处理函数执行完毕的时候才返回。 利用所学的知识,编码实现sleep函数的功能。 unsigned int psleep(unsigned int s... ...
分类:
其他好文 时间:
2017-10-25 23:25:01
阅读次数:
140
先写一个测试函数: #include <stdio.h> #include <signal.h> //signal函数的需要 设置信号处理函数!!!用signal1. void my_signal_fun(int signum) { static int cnt = 0; printf("signa ...
分类:
其他好文 时间:
2017-10-15 17:37:25
阅读次数:
158
一个事件可以使一个信号发送给一个进程,这个事件可以是硬件异常,可以是软件条件触发,可以是终端产生信号,也可以是一个kill函数调用。当信号产生后,内核通常会在进程表中设置某种形式的标志(flag)。我们可以认为当进程中的信号处理函数被触发的时候认为信号下达到了(delivered)这个进程。从信号产 ...
分类:
其他好文 时间:
2017-09-21 18:04:41
阅读次数:
208
软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。进程之间可以互相通过系统调用kill发送软中断信号。 内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。 注意,信号只是用来通知某进程发生了什么事件,并不给该进程传递任何数据。 kill -l ##可以列举当前系统支持 ...
分类:
编程语言 时间:
2017-08-07 10:15:37
阅读次数:
204