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