博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux信号通讯编程
阅读量:4285 次
发布时间:2019-05-27

本文共 1166 字,大约阅读时间需要 3 分钟。

信号通讯流程为:

①进程A/内核选择信号
②发送信号
③进程B接收信号并处理
Linux系统支持的所有信号均定义在/usr/include/asm/signal.h,其中常见的信号有:
①SIGKILL:杀死进程
②SIGSTOP:暂停进程
③SIGCHLD:子进程停止或结束时用来通知父进程
常用到的函数有:

kill函数

原型:int kill(pid_t,int sig)头文件:
功能:向进程发送信号,成功返回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)头文件:
功能:设置信号处理方式,成功则返回处理函数的函数指针,失败返回SIG_ERR参数:signum:要处理的信号 handler:对应着signum信号的处理方式,可以取SIG_IGN,SIG_DFL或用户自定义的函数,其中SIG_IGN为忽略信号,SIG_DFL为交给Linux内核处理

pause函数

原型:int pause(void)头文件:
功能:等待信号

实例

进程B接收信号并根据信号做出处理:

#include
#include
#include
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
#include
#include
void main(int argc,char* argv[]){ pid_t pid; pid=atoi(argv[1]);/*将argv[1]由char型转化为int型*/ kill(pid,10);}

转载地址:http://tmigi.baihongyu.com/

你可能感兴趣的文章
CSS:响应式下的折叠菜单(条纹式)
查看>>
响应式设计三部曲
查看>>
45种Javascript技巧大全
查看>>
PDO学习笔记
查看>>
MarkDown语法
查看>>
Linux的文件权限
查看>>
全屏滚动实现:fullPage.js和fullPage
查看>>
SASS小结
查看>>
一个js闭包问题的解答
查看>>
Responsive Design常用的媒体查询
查看>>
45个必备的JavaScript Web开发工具
查看>>
CSS3实现酷炫导航
查看>>
编写更好的CSS必备的40个工具
查看>>
设计出色响应式网站的十个技巧
查看>>
文60个有用CSS代码片段
查看>>
trick:CSS 3+checkbox实现JQuery的6个基本动画效果
查看>>
Trick:不用table,怎么等分DIV
查看>>
《机器学习实战》KNN算法实现
查看>>
《机器学习实战》ID3算法实现
查看>>
Linux终端小技巧
查看>>