信号
信号源来自:
键盘,操作系统,硬件,kill pid等。
查看系统信号:
kill -l
信号处理:
方式1:缺省处理,就是按照原本操作系统默认的方式处理
方式2:忽略处理,但是SIGKILL 和SIGSTOP不可忽略。
方式3:自己处理,但是SIGKILL 和SIGSTOP不可自行处理。
信号函数:
#include <signal.h>
typedef void (*sighandler_t)(int);
//宏定义sighandler_t指针,指向一个返回值void参数int的函数
sighandler_t signal(int signum, sighandler_t handler);
参数一是信号名,也可是对应的数字,参数二是处理方式
信号小程序:
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<signal.h>
void handler(int a) {
printf("无法杀死进程!%d\n", a);
}
typedef void(*handler_t)(int s);
int main() {
handler_t old = NULL;
//这里函数的返回信号处理程序的上一个值,就是old里放的是之前默认信号的值
old = signal(SIGINT, handler);
while (1) {
if (getchar() == '\n')
break;
}
signal(SIGINT, old);
while (1) {
printf("/");
fflush(stdout);
sleep(1);
}
return 0;
}