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就没有反映了
可使用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就没有反映了
相关文章推荐
- Linux的连接档
- Linux系统之间实现ssh无需密码连接
- [Linux学习笔记] Linux常用命令 - 文件搜索命令
- LinuxMint(同Ubuntu)下安装配置NFS设置共享目录
- Centos下配置svn服务器
- Linux vi 替换命令
- centos6.5 jdk7 ant 64位安装
- 捕获内核的异常事件
- [Linux学习笔记] Linux常用命令 - 权限管理命令
- 老王学linux-lamp-rpm
- 老王学linux-cacti
- linux c/c++ 后台开发常用组件之: 高性能LRU本地缓存
- 20151027 linux文件操作命令 体系结构
- proxychains and ssh(代理服务器linux)
- linux文章(11)---umask和chmod
- linux下/etc/hosts 和hostname文件的区别,如何正确地修改hostname
- Windows7+Eclipse+jdk7+CentOS5.8+Hadoop2.7.1开发环境搭建
- Linux分区和加密分区操作
- Linux下mysql的root密码忘记解决方法
- linux 下关于用户的操作