Linux 发送信号

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

一、kill函数的定义

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

语法形式:

在这里插入图片描述

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

二、发送信号

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

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

Linux 发送信号_第1张图片

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

Linux 发送信号_第2张图片

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

Linux 发送信号_第3张图片

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

main01的pid为11241:

在这里插入图片描述

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

Linux 发送信号_第4张图片
这时进程main01就接收到了进程mykill向它发送的SIGINT信号,然后将进程结束掉。

【注意】

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

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

Linux 发送信号_第5张图片
(2)通过kill结束这个进程:

Linux 发送信号_第6张图片

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

(1)代号为9的信号杀死进程
Linux 发送信号_第7张图片

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

Linux 发送信号_第8张图片

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

你可能感兴趣的:(Linux,linux,服务器,运维)