更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。
Linux信号:
信号的作用:linux通过信号去控制进程的行为动作(程序的退出,程序的暂停,程序的继续)
信号总共有四种响应方式:
第一种:信号的默认响应动作(linux系统已经规定好的)
第二种:改变信号的响应动作
第三种:信号的忽略
第四种:信号的阻塞(屏蔽)
常用信号
SIGINT------------------相当于ctrl+c
SIGCONT--------------程序继续
SIGSTOP--------------程序暂停
SIGKILL----------------杀死进程
注意:SIGKILL 和 SIGSTOP这两个信号既不能改变它们的响应动作,也不能忽略,其他的信号可以
(1)信号的发送
终端手动输入:
kill -信号的序号 进程的ID号
kill -信号的名字 进程的ID号
killall -信号的序号 进程的名字
killall -信号的名字 进程的名字
程序中:
头文件:#include
函数原型:int kill(pid_t pid, int sig);
参数:pid:进程的ID号
sig:信号的序号
返回:成功:0
失败:-1
(2)捕捉信号并改变信号的响应动作
头文件:#include
函数原型:void (*signal(int sig, void(*func)(int)))(int);
参数:sig:表示捕捉到的信号的序号
func:void(*p)(int)改变信号的响应动作
SIG_IGN 忽略信号
SIG_DFL 按照信号默认的动作响应
返回值:成功 最近一次调用该函数时第二个参数的值
失败 SIG_ERR
signal函数总共有三个功能:
功能一:改变信号的响应动作
功能二:SIG_IGN 忽略信号,信号发送给进程,进程直接舍弃
功能三:SIG_DFL 按照信号默认的动作响应
(3)阻塞进程,等待信号的到来
头文件:#include
函数原型:int pause(void);
特点:信号不来,一直阻塞,信号来了就不阻塞了
(4)自己给自己发送信号
头文件:#include
函数原型:int raise(int sig);
参数:sig:要发送的信号
具体应用实例:
改变信号的响应动作与发送信号的应用实例[signal()/kill()]
//–//–待更–//–//