您所在位置: 网站首页 / 文档列表 / linux/Unix相关 / 文档详情
linuxC进程间通信信号.pdf 立即下载
上传人:yy****24 上传时间:2024-09-07 格式:PDF 页数:6 大小:458KB 金币:18 举报 版权申诉
预览加载中,请您耐心等待几秒...

linuxC进程间通信信号.pdf

linuxC进程间通信信号.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

18 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

进程间通信—信号信号是UNIX中所使用的进程通信的一种最古老的方法。它是在软件层次上对中断机制的一种模拟,是一种异步通信方式。信号可以直接进行用户空间进程和内核进程之间的交互,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一进程,而无需知道该进程的状态。如果该进程当前并未处于执行态,则该信号就由内核保存起来,直到该进程恢复执行再传递给它为止;如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传递给进程。◦信号的生命周期信号是有内核产生的。◦用户进程对信号的响应方式1.忽略信号,即对信号不做任何处理,但是有两个信号不能忽略,即SIGKILL及SIGSTOP。2.捕捉信号,定义信号处理函数,当信号发生时,执行相应的自定义处理函数。3.执行缺省操作,Linux对每种信号都规定了默认操作。Linux中的大多数信号是提供给内核的,表8.6列出了Linux中最为常见信号的含义及其默认操作。表8.6常见信号的含义及其默认操作信号名含义默认操作SIGHUP该信号在用户终端连接(正常或非正常)结束时发出,通常是在终终止端的控制进程结束时,通知同一会话内的各个作业与控制终端不再关联该信号在用户键入INTR字符(通常是Ctrl-C)时发出,终端驱动程SIGINT终止序发送此信号并送到前台进程中的每一个进程SIGQUIT该信号和SIGINT类似,但由QUIT字符(通常是Ctrl-\)来控制终止该信号在一个进程企图执行一条非法指令时(可执行文件本身出现SIGILL终止错误,或者试图执行数据段、堆栈溢出时)发出该信号在发生致命的算术运算错误时发出。这里不仅包括浮点运算SIGFPE终止错误,还包括溢出及除数为0等其他所有的算术错误SIGKILL该信号用来立即结束程序的运行,并且不能被阻塞、处理或忽略终止SIGALRM该信号当一个定时器到时的时候发出终止SIGSTOP该信号用于暂停一个进程,且不能被阻塞、处理或忽略暂停进程该信号用于交互停止进程,用户键入SUSP字符时(通常是SIGTSTP停止进程Ctrl+Z)发出这个信号SIGCHLD子进程改变状态时,父进程会收到这个信号忽略进程异常终止时发出SIGABORT◦信号的处理流程◦使用信号的场合1.后台进程需要使用信号2.两个进程之间没有亲缘关系,无法使用无名管道pipe3.如何两个进程之间只能使用标准输入和输出,则无法使用fifo◦函数声明kill()和raise()(1)函数说明。kill()函数同读者熟知的kill系统命令一样,可以发送信号给进程或进程组(实际上,kill系统命令只是kill()函数的一个用户接口)。这里需要注意的是,它不仅可以中止进程(实际上发出SIGKILL信号),也可以向进程发送其他信号。与kill()函数所不同的是,raise()函数允许进程向自身发送信号。(2)函数格式。表8.7列出了kill()函数的语法要点。表8.7kill()函数语法要点#include<signal.h>所需头文件#include<sys/types.h>函数原型intkill(pid_tpid,intsig)正数:要发送信号的进程号0:信号被发送到所有和当前进程在同一个进程组的进程pid:函数传入值>1:信号发给所有的进程表中的进程(除了进程号最大的进程外)<1:信号发送给进程组号为-pid的每一个进程sig:信号成功:0函数返回值出错:1表8.8列出了raise()函数的语法要点。表8.8raise()函数语法要点#include<signal.h>所需头文件#include<sys/types.h>函数原型intraise(intsig)函数传入值sig:信号成功:0函数返回值出错:12.alarm()和pause()(1)函数说明。alarm()也称为闹钟函数,它可以在进程中设置一个定时器,当定时器指定的时间到时,它就向进程发送SIGALARM信号。要注意的是,一个进程只能有一个闹钟时间,如果在调用alarm()之前已设置过闹钟时间,则任何以前的闹钟时间都被新值所代替。pause()函数是用于将调用进程挂起直至捕捉到信号为止。这个函数很常用,通常可以用于判断信号是否已到。(2)函数格式。表8.9列出了alarm()函数的语法要点。表8.9alarm()函数语法要点所需头文件#include<unistd.h>函数原型unsignedintalarm(unsignedintseconds)second
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

linuxC进程间通信信号

文档大小:458KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
年会员
99.0
¥199.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用

手机号注册 用户名注册
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
我已阅读并接受《用户协议》《隐私政策》
已有账号?立即登录
登录
手机号登录 微信扫码登录
微信扫一扫登录 账号密码登录

首次登录需关注“豆柴文库”公众号

新用户注册
VIP会员(1亿+VIP文档免费下)
年会员
99.0
¥199.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用