Linux11信号

Posted by 川川的博客 on May 17, 2025

信号

  • 不同信号用不同的整数标识
  • 信号是一种软件层面的异步事件机制

image-20250623160220061

信号产生的时机

  • 信号产生会修改目标进程的task_struct

image-20250623160112310

image-20250623182837763

信号递送行为

  • 传入信号值参数

image-20250623184854393

阻塞和未决

  • 让产生的信号不能马上递送,而是处于未决状态
  • 已产生但未递送的信号

image-20250623190307898

原理:

image-20250623192017569

不同信号的阻塞

image-20250623192740469

低速系统调用

  • 在信号递送完成之后,会自动重启低速系统调用

image-20250623193422915

signal特点:一次注册,永久生效

  • 递送A时,会将A加入mask,其他信号不会加入mask
  • 会自动重启低速系统调用

让signal只生效一次

image-20250623194137759

sigaction

image-20250623202330406

sigaction属性

image-20250623200918951

image-20250623203238843

sigaction更多参数

  • SA_RESTART可以重启低速系统调用
  • SA_SIGINFO三参数版本

image-20250623203725904

让递送的信号A只能生效一次,SA_RESETHAND

image-20250623203932895

递送的信号A不屏蔽SA_NODEFER

  • 递送过程中不加入mask

image-20250623204438494

参数sa_mask

  • 本质是一个位图
  • 用来指定递送信号过程中的额外屏蔽信号

image-20250624124810819

image-20250624130721518

sigprocmask

  • 实现全程阻塞

image-20250624130933251

获取pending集合

image-20250624131731356

pause

  • 让当前进程处于阻塞,等待信号到来

image-20250624132340677

kill发送信号

  • 给别人发信号
raise
  • 给自己发信号

image-20250624133104462

alarm

  • 时钟信号

image-20250624140635133

时钟

image-20250624143418741

image-20250624144552673

实现mybash

image-20250624183730493

image-20250624183824236

练习:实现4窗口聊天