Linux信号(系统编程信号)

待我称王封你为后i 2022-11-25 11:44 359阅读 0赞

更多资料请点击:我的目录
本篇仅用于记录自己所学知识及应用,代码仍可优化,仅供参考,如果发现有错误的地方,尽管留言于我,谢谢。

Linux信号:
在这里插入图片描述
信号的作用:linux通过信号去控制进程的行为动作(程序的退出,程序的暂停,程序的继续)

信号总共有四种响应方式:
第一种:信号的默认响应动作(linux系统已经规定好的)
第二种:改变信号的响应动作
第三种:信号的忽略
第四种:信号的阻塞(屏蔽)

常用信号
SIGINT—————————相当于ctrl+c
SIGCONT———————程序继续
SIGSTOP———————程序暂停
SIGKILL————————杀死进程
注意:SIGKILL 和 SIGSTOP这两个信号既不能改变它们的响应动作,也不能忽略,其他的信号可以

(1)信号的发送

终端手动输入:

  1. kill -信号的序号 进程的ID
  2. kill -信号的名字 进程的ID
  3. killall -信号的序号 进程的名字
  4. killall -信号的名字 进程的名字

程序中:

  1. 头文件: #include <signal.h>
  2. 函数原型: int kill(pid_t pid, int sig);
  3. 参数: pid: 进程的ID
  4. sig: 信号的序号
  5. 返回: 成功:0
  6. 失败:-1

(2)捕捉信号并改变信号的响应动作

  1. 头文件: #include <signal.h>
  2. 函数原型: void (*signal(int sig, void(*func)(int)))(int);
  3. 参数: sig: 表示捕捉到的信号的序号
  4. func: void(*p)(int) 改变信号的响应动作
  5. SIG_IGN 忽略信号
  6. SIG_DFL 按照信号默认的动作响应
  7. 返回值: 成功 最近一次调用该函数时第二个参数的值
  8. 失败 SIG_ERR

signal函数总共有三个功能:
功能一:改变信号的响应动作
功能二:SIG_IGN 忽略信号,信号发送给进程,进程直接舍弃
功能三:SIG_DFL 按照信号默认的动作响应

(3)阻塞进程,等待信号的到来

  1. 头文件: #include <unistd.h>
  2. 函数原型: int pause(void);

特点:信号不来,一直阻塞,信号来了就不阻塞了

(4)自己给自己发送信号

  1. 头文件: #include <signal.h>
  2. 函数原型: int raise(int sig);
  3. 参数: sig: 要发送的信号

具体应用实例:
改变信号的响应动作与发送信号的应用实例[signal()/kill()]

//–//–待更–//–//

发表评论

表情:
评论列表 (有 0 条评论,359人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux系统编程信号捕捉

    前面我们学习了信号产生的几种方式,而对于信号的处理有如下几种方式: 1. 默认处理方式; 2. 忽略; 3. 捕捉。 信号的捕捉,说白了就是抓到一个信号后,执行我们指

    相关 Linux编程---信号处理

    信号是一种异步的进程间通信的方式.但是这种通知方式能交换的信息很少.只能说给一个事件的标志.类似单片机中的中断,强迫进程停止做当前应当做的事情,而去执行中断执行程序. 信号的

    相关 Linux系统信号

    信号概述:       信号是软件中断,它是在软件层次上对中断机制的一种模拟。 信号可以导致一个正在运行的进程被另一个正在运行的异步进程中断,转而处理某 一个突发事件。信