发送信号

信号可以发送给一个进程、一个进程组,甚至整个系统。发送信号的途径有多种。

kill 系统调用kill(pid, sig) 发送信号 sig 给目标进程 pidpid > 0 发送给指定进程;pid == 0 发送给同进程组所有进程;pid < 0 发送给指定进程组。

killpg 系统调用killpg(pgrp, sig) 发送信号给指定进程组的所有成员。

进程组(Process Group):每个进程属于一个进程组,进程组有一个组长(PGID = 组长PID)。进程组是作业控制的单位,Shell 将前台作业的所有进程分配在同一进程组中。

用户级发送

  • 键盘:Ctrl+C 发送 SIGINT,Ctrl+Z 发送 SIGTSTP,Ctrl+\ 发送 SIGQUIT
  • 命令行:kill -9 <pid> 发送 SIGKILL 强制终止进程。

内核级发送:内核在检测到事件时自动发送信号:

  • 子进程终止 → 向父进程发送 SIGCHLD
  • 定时器到期 → 向当前进程发送 SIGALRM
  • 硬件故障 → 向当前进程发送 SIGSEGVSIGFPE

进程间发送:普通用户只能向自己拥有的进程发送信号,只有 root 可以向任何进程发送信号。

链接到