【C语言】【unix c】改变信号的处理函数

xiaoxiao2021-02-27  194

三、改变信号的处理函数 进程对信号的处理有默认动作。默认处理是终止进程。 对信号的处理有3种方式:默认处理,忽略信号,用户自定义 SIG_DFL:默认 SIG_IGN:忽略 doit(这里的名字自己定义,doit只是为了占位):用户自定义的信号处理函数 子进程从父进程继承信号处理函数 bash的信号继承是默认处理(终止进程) 系统提供了signal(2)用来改变信号的处理函数 #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 功能: 参数: signum:指定了信号的编号 handler:指定了signum信号的处理函数 SIG_DFL SIG_IGN 用户自定义 返回值:返回的是旧的信号处理函数的地址 SIG_ERR 错误 举例说明:编码实现进程忽略2号信号,(signal2.c) #include <signal.h> int main(void) { //改变信号的处理函数为忽略 signal(2, SIG_IGN); while(1); return 0; } tarena@ubuntu:~/day/day32$ a.out ^C^C^C^C^C^C^C^C^\退出 (核心已转储) 分析: 输入ctrl+c是停止不了的 ctrl+\可以终止 这里的2号信号已经被自定义,相当于忽略 编码实现进程对2号信号的处理采用用户自定义函数(signal_2u.c) #include <signal.h> #include <stdio.h> //函数的参数是信号的编号 void doit(int n) { printf("recv...%d\n", n); return; } int main(void) { //修改2号信号的处理函数为用户自定义 signal(2, doit);//自定义了一个函数,在执行该信号时进行doit函数 while(1); return 0; } tarena@ubuntu:~/day/day32$ a.out ^Crecv...2 ^Crecv...2 ^Crecv...2
转载请注明原文地址: https://www.6miu.com/read-14420.html

最新回复(0)