Young87

当前位置:首页 >个人收藏

Linux的进程软中断通信(signal和kill)

一、软中断信号

软中断信号( s i g n a l signal signal,又简称为信号)用来通知进程发生了事件。进程之间可以通过调用kill函数发送软中断信号。 L i n u x Linux Linux 内核也可能给进程发送信号,通知进程发生了某个事件(例如内存越界)。
注意:信号只是用来通知某进程发生了什么事件,无法给进程传递任何数据,进程对信号的处理方法有三种:
① 忽略某个信号,对该信号不做任何处理,就像未发生过一样。
② 设置中断的处理函数,收到信号后,由该函数来处理。
③ 对该信号的处理采用系统的默认操作,大部分的信号的默认操作是终止进程。

常用信号

信号名信号值发出信号的原因
SIGINT2键盘中断 ctrl + c
SIGTERM15采用kill 进程编号killall 程序名通知程序
SIGKILL9采用kill -9 进程编号强制杀死程序

常用信号处理方法

信号处理方法作用
SIG_IGN忽视信号
SIG_DFL默认的信号处理程序

✔ 更具体内容下文会提及


二、函数介绍

(1)wait函数

#include<sys/types.h>
#include<wait.h>		//头文件
pid_t wait(int *status)		//函数原型
(pid_t 是一个宏定义,其实质是int 被定义在#include<sys/types.h>中)

wait函数作用是阻塞父进程,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了子进程,即调用成功,wait就会收集这个子进程的信息,并把它彻底销毁后返回被收集的子进程的进程ID;如果调用进程没有子进程,调用就会失败,此时wait返回 − 1 -1 1
因此wait函数有三个功能:
① 阻塞父进程,等待子进程退出。
② 回收子进程残留资源。
③ 获取子进程结束状态(即返回值)。
参数 s t a t u s status status 用来保存被收集进程退出时的一些状态,它是一个指向 i n t int int 类型的指针。如果只是把子进程消灭掉,则设定这个参数为 N U L L NULL NULL 0 0 0 就可以了,即wait(NULL)wait(0)

wait函数一旦被调用,就会一直阻塞在这里,直到有一个子进程退出出现为止。


(2)signal函数

#include<signal.h>		//头文件
void (*signal(int sig, void (*func)(int)))(int)		//函数原型
sighandler_t signal(int signum, sighandler_t handler)	//用typedef处理过的signal函数

signal函数可以设置程序对信号的处理方式。
(对 t y p e d e f typedef typedef 处理过的函数进行说明)
参数 s i g n u m signum signum 表示信号的编号。
参数 h a n d l e r handler handler 表示信号的处理方式,有三种情况:
SIG_IGN:忽略参数 s i g n u m signum signum所指的信号。
② 一个自定义的处理信号的函数,信号的编号为这个自定义函数的参数。
SIG_DFL:恢复参数 s i g n u m signum signum所指信号的处理方法为默认值。
这里不解释其返回值,它的返回值对本次内容关系不大


(3)sleep函数

#include<unistd.h>		//头文件
unsigned int sleep (unsigned int seconds)	//函数原型

进程执行挂起一段时间,也就是等待一段时间在继续执行。(参数 s e c o n d s seconds seconds单位为秒)


(4)kill函数

#include<sys/types.h>
#include<signal.h>		//头文件
int kill(pid_t pid, int sig)		//函数原型

kill函数用于在程序中向其它进程或者线程发送信号。
参数 p i d pid pid 有几种情况:
p i d > 0 pid > 0 pid>0 将信号传给进程号为 p i d pid pid 的进程。
p i d = 0 pid=0 pid=0将信号传给和目前进程相同进程组的所有进程,常用于父进程给子进程发送信号,注意,发送信号者进程也会收到自己发出的信号。
p i d = − 1 pid=-1 pid=1 将信号广播传送给系统内所有的进程,例如系统关机时,会向所有的登录窗口广播关机信息。
参数 s i g sig sig 用作准备发送的信号代码。
返回值: 成功执行时,返回 0 0 0;失败时返回 − 1 -1 1

对于pid的值的理解可以参考:

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: Selenium库的使用

下一篇: 强化学习应用简述---强化学习方向优秀科学家李玉喜博士创作

精华推荐