第十周Linux教材第六章学习笔记——信号和信号处理

发布时间 2023-11-12 15:12:34作者: 20211115fyq

信号和信号处理

6.1 信号和中断

  • 在Linux中,信号是一种异步通信机制,用于通知进程发生了某些事件
  • 当进程接收到信号时,它可以选择忽略信号、执行默认操作或执行自定义操作。
  • “中断”是从I/O设备或协处理器发送到CPU的外部请求,它将CPU从正常执行转移到中断处理。而“信号”是要发送给进程的请求
  • 中断是发送给进程的事件,它将“进程”从正常活动转移到其他活动,称为“中断处理”。
  • “进程”可在完成“中断”处理后恢复正常活动。

6.2 信号的分类

  • Linux中的信号可以分为三类:标准信号、实时信号和自定义信号
  • 标准信号是预定义的信号,编号从1到31,例如 SIGINT(中断信号)和 SIGTERM(终止信号)。
  • 实时信号是可用于实时应用程序的信号,编号从32到64。
  • 自定义信号是由进程自己定义的信号,可以使用任何编号。

6.3 信号的发送和接收

  • 进程可以使用 kill 函数向其他进程或自身发送信号。
  • 接收信号的进程需要使用 signal 函数或 sigaction 函数来注册信号处理程序。
  • 信号处理程序是一个函数,用于处理接收到的信号。

6.3 信号处理程序的执行

  • 当进程接收到信号时,它可以选择执行默认操作、忽略信号或执行自定义操作。
  • 默认操作通常是终止进程或停止进程。
  • 进程可以使用 signal 函数或 sigaction 函数来注册自定义信号处理程序。
  • 当信号处理程序执行时,进程的正常执行流程会被中断,进入信号处理程序执行。
  • 信号处理程序应该尽可能快地执行,以避免阻塞进程。

6.4 信号的阻塞和解除阻塞

  • 进程可以使用 sigprocmask 函数来阻塞或解除阻塞信号。
  • 当信号被阻塞时,进程不会接收到该信号。
  • 当信号解除阻塞时,进程可以接收到该信号。

6.5 信号的排队

  • 当进程接收到多个相同类型的信号时,这些信号会被排队,直到进程处理完当前的信号。
  • 进程可以使用 sigaction 函数来设置信号的排队方式。

6.6 信号的处理机制

  • Linux中的信号处理机制是基于事件驱动的,它允许进程在发生某些事件时立即响应。
  • 信号处理程序是一种异步执行机制,它可以在进程的任何时间点执行。因此,信号处理程序应该尽可能快地执行,以避免阻塞进程。
  • 进程收到某种信号的时候,并不是立即处理的。比如远处看到红绿灯变成红灯,我们会立即停下吗?并不会,我们会把看到红灯这件事记录在大脑中,等走到路口再停下。进程当前可能在执行优先级更高的东西,所以要选择合适的时候再处理这个信号。已经到来的信号会被暂时保存起来,以供在合适的时候处理,应该保存在哪里呢——进程控制块task_struct
  • 参考链接:https://blog.csdn.net/challenglistic/article/details/124413135

向ChatGpt请求苏格拉底式询问