每个进程收到的所有信号,都是由内核负责发送的,内核处理
信号的处理方式
- 执行默认操作
-
-
- 终止进程
- 终止进程且core文件
- 忽略
- 暂停
- 继续
-
-
- 忽略信号
- 捕捉信号
信号来源:硬件来源,软件来源
查询signal信号
man 7 signal
特殊信号:9)SIGKILL/19)SIGSTOP 不允许捕捉和忽略
kill命令产生信号:kill -SIGKILL pid
kill函数:
int kill(pid_t, int sig)
成功:0
失败为:-1
pid > 0 发送信号给指定的进程
pid = 0 发送信号给与调用kill函数进程属于同一进程组的所有进程
pid < 0 取|pid|发给对应进程组
pid = -1 发送给进程有权限发送的系统中所有进程
raise函数:给当前进程发送指定信号(自己给自己发)
raise(signo)== kill(getpid(), signo)
int raise(int sig) 成功:0 失败非0值
abort函数:给自己发送异常终止信号
void abort(void)
软件条件产生信号
alarm函数
alarm();
设置定时器(闹钟)
每个进程都有且只有位于定时器
常用:取消定时器alarm(0),返回旧闹钟余下秒数
setitimer函数
设置定时器(闹钟),可替代alarm函数
精度微秒us,可以实现周期定时
成功:0
失败为:-1
参数:which:指定定时方式
- 自然定时:ITIMER_REAL-> 14)SIGLARM 计算自然时间
setitimer(int which,const struct itimerval *new_value, struct itimeral *old_value)
signal函数
signal( signum , my_func);(注册信号处理函数)
参数1:信号 参数2:构造函数
传送信号给指定进程
sigaction函数
int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact)