Linux信号通讯编程
2015-08-10 15:55
316 查看
信号通讯流程为:
①进程A/内核选择信号
②发送信号
③进程B接收信号并处理
Linux系统支持的所有信号均定义在/usr/include/asm/signal.h,其中常见的信号有:
①SIGKILL:杀死进程
②SIGSTOP:暂停进程
③SIGCHLD:子进程停止或结束时用来通知父进程
常用到的函数有:
进程A发送信号给进程B.由于发送信号kill需要知道进程B的id,所以在运行进程A的时候要输入进程B的id,而进程B的id可通过命令ps aux查看。
①进程A/内核选择信号
②发送信号
③进程B接收信号并处理
Linux系统支持的所有信号均定义在/usr/include/asm/signal.h,其中常见的信号有:
①SIGKILL:杀死进程
②SIGSTOP:暂停进程
③SIGCHLD:子进程停止或结束时用来通知父进程
常用到的函数有:
kill函数
原型:int kill(pid_t,int sig) 头文件:<sys/types.h><signal.h> 功能:向进程发送信号,成功返回0,失败返回-1 参数:pid的值有多种选择 1. pid大于零时,pid是信号欲送往的进程的ID。 2. pid等于零时,信号将送往所有与调用kill()的那个进程属同一个使用组的进程。 3. pid等于-1时,信号将送往所有调用进程有权给其发送信号的进程,除了进程1(init)。 4. pid小于-1时,信号将送往以-pid为组标识的进程。 sig:发送的信号
signal函数
原型:typedef void (*sighandler_t)(int);/*函数指针*/ sighandler_t signal(int signum,sighandler_t handler) 头文件:<signal.h> 功能:设置信号处理方式,成功则返回处理函数的函数指针,失败返回SIG_ERR 参数:signum:要处理的信号 handler:对应着signum信号的处理方式,可以取SIG_IGN,SIG_DFL或用户自定义的函数,其中SIG_IGN为忽略信号,SIG_DFL为交给Linux内核处理
pause函数
原型:int pause(void) 头文件:<unistd.h> 功能:等待信号
实例
进程B接收信号并根据信号做出处理:#include<stdio.h> #include<signal.h> #include<unistd.h> void func(int a) { printf("process received a signal\n"); } void main() { signal(10,func); pause(); }
进程A发送信号给进程B.由于发送信号kill需要知道进程B的id,所以在运行进程A的时候要输入进程B的id,而进程B的id可通过命令ps aux查看。
#include<stdio.h> #include<signal.h> #include<sys/types.h> void main(int argc,char* argv[]) { pid_t pid; pid=atoi(argv[1]);/*将argv[1]由char型转化为int型*/ kill(pid,10); }
相关文章推荐
- Linux安装VMWare虚拟机(Kali)
- Linux命令详解:alias创建自己的命令
- linux查找技巧: find grep xargs
- linux 进程间通信之 消息队列
- 关于linux使用动态库进行进程间通讯
- OpenBLAS,Numpy,Scipy For Linux
- linux安装QQ
- linux随笔-3
- 迅为4412开发板Linux驱动教程之内核开发基础
- 我想在linux下用json
- 【转】Linux Page Cache的工作原理
- linux系统怎么增加swap分区空间小?
- Linux - RAID和LVM
- Linux - RAID和LVM
- LINUX下SVN系统的搭建
- linux上安装配置vsftpd
- 基于64位CentOS6.4安装JDK8.0
- 《Linux设备驱动开发详解:基于最新的Linux 4.0内核》china-pub 预售
- Linux基础学习笔记-第一课:杂项
- 《Linux设备驱动开发详解(第3版)》(即《Linux设备驱动开发详解:基于最新的Linux 4.0内核》)网购链接