进程间通信方式(二)-- 信号通信

本文介绍了Linux系统中的信号通信机制,包括信号的概念、默认处理方式、修改信号处理方式,以及常用信号和相关函数如signal()、kill()、pause()、alarm()的用法。还探讨了如何利用信号处理管道只写不读的情况和僵尸进程。
摘要由CSDN通过智能技术生成

1. 概念

互斥:同一时间只能有一个进程或者线程运行
同步:在互斥的基础上有顺序执行
异步:在执行一个程序过程中,打断当前进程执行另一个程序,执行完毕后接着之前的代码继续运行


信号是唯一的一种异步通信机制

信号可以理解为当前系统中定义好的一些标识,每一个标识都有自己特定的含义,并且当进程在执行的时候产生了这个标识,对当前进程会有一定的影响

多个进程就是通过发送信号的方式来实现进程间通信的


2. 信号对进程的默认处理方式

每一个信号产生之后,都会对当前进程有一个默认的处理方式

处理方式 含义
忽略 收到该信号后,对当前进程没有影响
结束进程 收到该信号后,结束当前进程
停止进程 收到信号后,停止当前进程
停止的进程 恢复执行 信号产生后,收到该信号的进程会恢复执行(后台执行)

3. 修改信号对进程的处理方式

修改后的方式 含义
忽略 信号产生后,对当前进程无影响
缺省(default,默认) 按照信号的默认处理方式处理
捕捉 信号产生后,按照自定义方式处理

注意
SIGKILLSIGSTOP这两个信号只能以缺省的方式处理,不能忽略也不能捕捉


4. 常用信号及处理方式

kill -l命令可以查询常用的信号
在这里插入图片描述

常用信号


5. 信号相关函数

5.1 signal()

#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
-->
void (*signal(int signum, void (*handler)(int)))(int);
功能:设置信号对进程的处理方式
参数:
    signum:信号
    handler:处理方式
        SIG_IGN  忽略,当信号产生后对当前进程没有任何影响
        SIG_DFL  缺省,按照当前信号默认的方式处理
        void (*handler)(int sig) 信号处理函数,自定义函数来处理产生信号之后的过程
                sig:调用signal时的第一个参数
返回值:
    成功:返回修改之前信号对进程的处理方式
    
    失败:SIG_ERR

signal的返回值是一个函数指针,用于保存设置之前的信号的处理方式

5.2 kill() / raise()

#include <sys/types.h>
#include <signal.h>
int kill(
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值