您的位置:首页 > 运维架构 > Linux

Linux中的简单信号程序

2015-10-27 22:18 671 查看
在linux中信号9和19不可忽略;

可使用kill -l来查看所有信号,共有64个;

一个简单的捕获信号例子,用来模拟中断

include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <signal.h>

#define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while (0)

void handler(int sig);
int main(int argc, char *argv[])
{
//old signal
__sighandler_t oldhandler;
//creat signal with "Ctrl + C"
oldhandler = signal(SIGINT, handler);
if (oldhandler == SIG_ERR)
ERR_EXIT("signal error");

//whatever "char" input
while (getchar() != '\n')
;
//reset signal to orignal
if (signal(SIGINT, oldhandler) == SIG_ERR)
ERR_EXIT("signal error");
for (;;);
return 0;
}

void handler(int sig)
{
printf("recv a sig=%d\n", sig);
}


运行上面的程序:
一开始加入了一个SIGINT信号(可以从键盘ctrl + C来输入);

当输入ctrl + c时,打印收到的信号,如下所示:

[root@localhost signal]# ./01signal 

^Crecv a sig=2

^Crecv a sig=2

^Crecv a sig=2

^Crecv a sig=2

^Crecv a sig=2

当随意输入一个字符后,信号恢复之前的设置,再次按下ctrl+c就没有输出了;

^Crecv a sig=2

^Crecv a sig=2

^Crecv a sig=2

^Crecv a sig=2

^Crecv a sig=2

g

^C

按下ctrl+c就没有反映了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: