Linux信号通讯编程
信号通讯流程为:
①进程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信号通讯编程的更多相关文章
- 信号通讯编程,王明学learn
信号通讯编程 在Linux系统中,信号(signal)同样也是最为古老的进程间通信机制. 一.信号类型 Linux系统支持的所有信号均定义在/usr/include/asm/signal.h(展示), ...
- Linux高性能server编程——信号及应用
信号 信号是由用户.系统或者进程发送给目标进程的信息.以通知目标进程某个状态的改变或系统异常. Linux信号可由例如以下条件产生: 对于前台进程.用户能够通过输入特殊的终端字符来给它发送信号. ...
- 《Linux/UNIX系统编程手册》第63章 IO多路复用、信号驱动IO以及epoll
关键词:fasync_helper.kill_async.sigsuspend.sigaction.fcntl.F_SETOWN_EX.F_SETSIG.select().poll().poll_wa ...
- Linux下串口编程入门
简介: Linux操作系统从一开始就对串行口提供了很好的支持,本文就Linux下的串行口通讯编程进行简单的介绍. 串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用 ...
- python学习笔记——多进程间通信——Linux信号基础
1 信号的基本描述 Signal信号(其全程为软中断信号)是Linux系统编程中非常重要的概念,信号是异步进程中通信的一种方式. 作用是通知进程发生了异步事件.进程之间可以调用系统来传递信号, 本身内 ...
- 【linux草鞋应用编程系列】_5_ Linux网络编程
一.网络通信简介 第一部分内容,暂时没法描述,内容实在太多,待后续专门的系列文章. 二.linux网络通信 在linux中继承了Unix下“一切皆文件”的思想, 在linux中要实现网 ...
- 【linux草鞋应用编程系列】_3_ 进程间通信
一.进程间通信 linux下面提供了多种进程间通信的方法, 管道.信号.信号量.消息队列.共享内存.套接字等.下面我们分别 介绍管道.信号量.消息队列.共享内存. 信号和套 ...
- Linux信号基础
Linux信号基础 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux进程基础一文中已经提到,Linux以进程为单位来 ...
- 《Linux/Unix系统编程手册》读书笔记7 (/proc文件的简介和运用)
<Linux/Unix系统编程手册>读书笔记 目录 第11章 这章主要讲了关于Linux和UNIX的系统资源的限制. 关于限制都存在一个最小值,这些最小值为<limits.h> ...
随机推荐
- 深入了解JVM(Java虚拟机)
虚拟机 JRE由Java API和JVM组成,JVM通过类加载器(Class Loader)加类Java应用,并通过Java API进行执行. 虚拟机(VM: Virtual Machine)是通过软 ...
- 跑RFCN
按照这个来http://blog.csdn.net/sinat_30071459/article/details/53202977
- vc枚举本机端口信息API
常用的获取端口信息的函数: GetTcpTableGetExtendedTcpTableGetUdpTableGetExtendedUdpTable GetTcp6Table function Get ...
- strong&weak
copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议 ...
- HDU - 5438 Ponds(拓扑排序删点+并查集判断连通分量)
题目: 给出一个无向图,将图中度数小于等于1的点删掉,并删掉与他相连的点,直到不能在删为止,然后判断图中的各个连通分量,如果这个连通分量里边的点的个数是奇数,就把这些点的权值求和. 思路: 先用拓扑排 ...
- CSS--浮动与定位
*浮动布局能够实现横向多列布局. 1.在网页中,元素有三种布局模型: 1.流动模型(Flow) 2.浮动模型 (Float) 3.层模型(Layer) 流动(Flow)是默认的网页布局模式.流动布局模 ...
- vue项目中设置跨域
config->index.js 'use strict' // Template version: 1.3.1 // see http://vuejs-templates.github.io/ ...
- 有关OEP脱壳
首先补充: OEP:(Original Entry Point),程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳. PUSHAD (压栈) ...
- Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二)
Android渲染器Shader:梯度渐变扫描渲染器SweepGradient(二) 附录文章1介绍了线性渐变渲染器. Android的SweepGradient梯度渐变扫描,重点是在构造Swe ...
- 2016上海站EC-final总结!
2016上海站EC-final总结 本想在知乎上发起一个话题:没有半点准备实力菜得抠脚的选手突然有机会参加final是什么体验.不过感觉这样太高调了,于是..... 以上说的就是事实,毫无准备.毫无状 ...