Linux进程通信之进程信号

一、信号的概念:

信号机制是Linux最基本的通讯机制,它可以用来向一个或者多个进程发送异步事件信息,传送少量信息。信号是一个软件中断,并且是一个“软中断”(只是告诉有这样一个信号,但这个信号具体如何进行处理、什么时候处理,都是由进程决定的,所以是软中断)

二、信号的产生:

硬件产生:

        “ctrl+c ”:2号信号;“ctrl+z”:20号信号;“ctrl+|”:3号信号

软件产生:

        kill函数:

int kill(pid_t pid,int sig)

参数:

pid:要操作的进程号;sig:具体信号

给pid进程发送sig信号

eg:kill(getipd(),2)

        raise函数

int raise(int sig)

 参数:sig:具体信号类型

谁调用给谁发信号

三、信号的种类:

Linux系统中定义了一些列的信号类型,这些信号可以由内核或者系统中的其他具有设当权限的进程产生,对于收到信号的进程,其task_struct结构体中的signal属性的某一位置位,使用kill-l命令可以列出所有已经定义的信号:

非可靠信号:(非实时信号)

1~31 :可能会丢失信号

可靠信号:(实时信号)

34~64:一定不会丢失的信号

总共有62个信号。


四、信号的处理方式:

操作系统对信号的处理方式(man 7 signal中查看)

term、core、cont、ign、stop

默认的处理方式:SIG_DFL,操作系统当中已经定义好了信号的处理方式了

忽略处理方式为:SIG_IGN ,该信号为忽略处理(子进程退出时给父进程发送的信号SIGCHID,其处理方式为忽略处理,所以父进程忽略处理,没有回收其退出状态信息,导致子进程成为僵尸进程)

自定义的处理方式:程序员可以更改信号的处理方式,定义一个函数,当进程收到该信号时,调用自定义的函数

五、信号的注册:

概念:一个进程收到了一个信号,这个过程称之为注册,信号的注册和注销是两个独立的过程

内核中信号注册位图以及sigqueue队列的了解:
注册位图、sigqueue都是进程当中的内容,每一个进程都有自己独有的注册位图和sigque

非实时信号与实时信号在注册时的区别:

  1. 非实时信号的注册
  2. 实时信号的注册
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值