linux IPC 通信 study 二:信号signal
2015-11-03 17:42
525 查看
信号是一种软中断,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。signal是ipc机制中唯一的异步通信机制。
信号事件的发生有两个来源:
硬件 比如键盘或者其他硬件故障。
软件 比如一些系统函数 kill raise alarm 或者其他一些非法运算等操作。
进程对信号的响应有三种方式:
1)忽略信号,注意SIGKILL和SIGSTOP不能被忽略。
2)捕捉信号,分发多对应的信号处理函数。
3)执行缺省操作,linux 对每种信号都规定了默认的操作。
发送信号的主要函数有:kill,raise, sigqueue, alarm, abort
函数原型为:
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
sample code:
[cpp]
view plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/9e12f1d3e499fc949c886e7c9e0484f9)
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
void disposition(int num)
{
if (SIGQUIT == num)
fprintf(stdout,"catch:SIGQUIT\n");
else if (SIGINT == num)
fprintf(stdout,"catch:SIGINT\n");
return;
}
int main(int argc, char **argv)
{
int ret = 0;
fprintf(stdout, "waitting for signal...\n");
signal(SIGQUIT, disposition);
signal(SIGINT, disposition);
pause();
return ret;
}
信号事件的发生有两个来源:
硬件 比如键盘或者其他硬件故障。
软件 比如一些系统函数 kill raise alarm 或者其他一些非法运算等操作。
进程对信号的响应有三种方式:
1)忽略信号,注意SIGKILL和SIGSTOP不能被忽略。
2)捕捉信号,分发多对应的信号处理函数。
3)执行缺省操作,linux 对每种信号都规定了默认的操作。
发送信号的主要函数有:kill,raise, sigqueue, alarm, abort
函数原型为:
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
sample code:
[cpp]
view plaincopy
![](https://oscdn.geek-share.com/Uploads/Images/Content/201611/a7c8e286f463007e2a900848b93dd72c.png)
#include <stdlib.h>
#include <stdio.h>
#include <signal.h>
void disposition(int num)
{
if (SIGQUIT == num)
fprintf(stdout,"catch:SIGQUIT\n");
else if (SIGINT == num)
fprintf(stdout,"catch:SIGINT\n");
return;
}
int main(int argc, char **argv)
{
int ret = 0;
fprintf(stdout, "waitting for signal...\n");
signal(SIGQUIT, disposition);
signal(SIGINT, disposition);
pause();
return ret;
}
相关文章推荐
- RHEL/CentOS 7.x/6.x/5.x EPEL Repository
- linux IPC 通信 study 一:管道
- linux下rarlinux安装后找不到rar命令处理方法
- centos编译安装svn
- linux网卡统计信息清零
- centos 新增用户, 然后他在主目录添加网站403Forbbiden
- Linux C中读取/dev/input/event设备来判断键盘按键是否按下
- linux线程异常保护
- linux一天一命令博客链接
- linux下静态库的ranlib使用
- linux ar命令用法
- linux的crontab定时服务备份mysql数据
- Centos7 安装python3的独立环境
- Linux下使用Eclipse开发Hadoop应用程序
- Linux下crontab定时执行脚本
- java代码调用linux命令,生成.pem公钥私钥证书
- centos7 挂载virtualbox 中无法挂载共享文件
- PostgreSQL在CentOS下的源码安装
- 理解LInux路由
- 如何找出Linux系统中内置模块的信息