标签:
信号:进程与进程之间通讯机制
信号是软件中断
信号是异步事件
信号来源:内核产生,常用信号kill(),raise(),alarm(),settimer()等
kill -l
查看linux所有 信号共64个 1-31 非实时信号发送信号可能回丢失,不支持信号排队
32-64实时信号
进程处理信号:
忽略信号
SIGKILL和SIGSTOP永远不能被忽略
忽略硬件异常
进程启动时SIGUSER1和SIGUSER2两个信号被忽略
执行默认操作
每个信号都有默认动作,大部分信号动作是终止信号
捕获信号
告诉信号内核出现信号是调用自己处理函数
SIGKILL和SIGSTOP不能被捕获
signal函数 信号注册函数 void (*signal(int signo,void(*func)(int)))(int); 参数 signo 要登记的信号值1-64 func 信号处理函数指针/忽略信号SIG_IGN/默认信号SIG_DEL 若成功返回信号处理函数指针,否则返回SIG_ERR
范列
#include <unistd.h> #include <stdlib.h> #include <signal.h> #include <stdio.h> void set_signal(int signo) { printf("pid: %d,signo: %d\n",getpid(),signo); } int main() { //SIGTSTP就是ctrl + z if(signal(SIGTSTP,set_signal) == SIG_ERR) { printf("set signal error"); } //ctrl+c if(signal(SIGINT,set_signal) == SIG_ERR) { printf("set signal error"); } int i=0; while(i<30) { printf("i : %d\n",i++); sleep(1); } return 0; }
标签:
原文地址:http://www.cnblogs.com/peixiguang/p/5844122.html