Linux 发送信号

进程可以通过系统调用kill函数向包括它本身在内的其他进程发送一个信号。如果程序没有发送该信号的权限,对kill函数的调用就将失败,失败的常见原因是目标进程由另一个用户所拥有。这个函数和shell命令完成相同的功能。

一、kill函数的定义

发送信号的kill函数的操作实际上是系统调用。

语法形式:

在这里插入图片描述

kill函数把参数sig给定的信号发送给由参数pid给出的进程号所指定的进程,成功时它返回0,失败则返回-1。

二、发送信号

【例】现在有一个程序main01.c的代码如下图所示,执行这个程序,然后在另一个进程中给这个正在执行的程序发送信号。

(1)现在有这样一个程序main01,编译并执行这个程序,此时会一直输出"hello"。main01.c具体代码如下:

在这里插入图片描述

(2)另外一个程序mykill.c如下,该程序用来发送信号:

在这里插入图片描述

先在一个终端中编译并执行第一个程序main01,这时会一直输出"hello":

在这里插入图片描述

然后再另一个终端中查看进程main01的pid,然后编译并执行第二个程序mykill:

main01的pid为11241:

在这里插入图片描述

编译并执行第二个程序mykill,执行mykill的时候顺便传参,传参的内容就是将信号发送给pid为多少的进程和要发送的信号的代号,在这里假设要给main01发送SIGINT信号,SIGINT信号为2:

在这里插入图片描述
这时进程main01就接收到了进程mykill向它发送的SIGINT信号,然后将进程结束掉。

【注意】

  1. 信号代号为15的信号就是系统kill命令默认发送的信号

(1)以代号为15的信号结束一个进程:

在这里插入图片描述
(2)通过kill结束这个进程:

在这里插入图片描述

  1. 信号代号为9的信号就是系统kill -9命令默认发送的信号,这个信号的响应方式不允许改变

(1)代号为9的信号杀死进程
在这里插入图片描述

(2)以kill -9命令杀死这个进程:

在这里插入图片描述

代号为9(kill -9)的信号是为了防止出现一个无论怎样都结束不掉的进程出现,所以不允许改变它的响应方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值