cleaning up and exiting...\n"); // 在这里进行清理工作 exit(0); } int main() { // 注册信号处理函数 signal(SIGINT, handle_sigint); printf("Running... Press Ctrl+C to stop.\n"); while (1) { sleep(1); } return 0; }
一个信号可以对应一个处理函数,同时多个信号可以对应一个处理函数。 对于SIGINT信号 我们可以用ctrl+c或ctrl+z来中断进程,来执行SIGINT注册的函数。 2、 高级信号处理。 在linux系统提供了一个功能更强的系统调用。 [cpp]view plaincopyprint? #include <signal.h> int sigaction(int signumbet,const structsigaction...
#include<signal.h> intsigaddset(sigset_t*set,intsig) intsigdelset(sigset_t*set,intsig) intsigismember(sigset_t*set,intsig); intsigpending(sigset_t*set); sigismember:sig存在于set中返回1,否则返回0 sigpending:返回调用进程处于等待的信号 GNU C的拓展 ...
1. #include<signal.h> 2.3. void(*signal(int signumber,void ((*func)(int))(int)signumber表⽰信号处理函数对应的信号。func是⼀个函数指针。此函数有⼀整型参数,并返回void型。其实func还可以取其他定值如:SIG_IGN,SIG_DFL.SIG_IGN表⽰:忽略signumber所指出的信号。SIG_DFL表⽰表⽰调⽤...
Signal Value Action Comment ────────────────────────────────────────────────────────────────────── SIGHUP 1 Term Hangup detected on controlling terminal or death of controlling process SIGINT 2 Term Interrupt ...
signal 是一种通信机制,可以跨进程发送,可以同进程跨线程发送,可以不同进程向指定线程发送。 信号的创建有两套api,一个是signal,一个是sigaction,signal缺陷很多,比如没有提供触发后自动再次设置处理信号处理策略,这会导致连续触发的两个信号,一个进入了期待的信号处理流程,另外一个则进入了默认的信号处理流程。
Capture signal number is:2read failed!: Interrupted system call 我们看到Ctrl+C后,main函数会读出错,进程会中断 程序(2) #include<stdio.h>#include<signal.h>#include<sys/types.h>#include<unistd.h>#include<sys/wait.h>void hello(int a){ printf("The input number is %d\n",a);} int main(...
signal对应的值: POSIX.1中列出的信号: SIGHUP 1 A 终端挂起或者控制进程终止 SIGINT 2 A 键盘中断(如break键被按下) SIGQUIT 3 C 键盘的退出键被按下 SIGILL 4 C 非法指令 SIGABRT 6 C 由abort(3)发出的退出指令 SIGFPE 8 C 浮点异常 ...
至少对一些信号)忽略;信号名称是在头文件 signal.h中定义的,对应在cpp中叫做 #include <csignal> ,...
Linux C 信号使用 讳疾忌医 电子游戏行业 从业人员 1 人赞同了该文章 1、信号的基本概念 1、 信号(signal)是软件中断,是进程之间相互传递信息的一种方法,用于通知进程发送了的事件,但是,不能给进程传递任何数据 2、信号产生的原因有很多,在Linux下,可以用kill和killall命令发送信号 ps -ef | grep 需要...