深入理解信号处理:从基础到实践
1. 信号概述
信号是软件中断,可由多种原因生成,如按下特定按键、进程间发送或操作系统因特定情况触发。信号处理代码使用起来较为棘手,调试也颇具难度,但在某些情况下,信号是唯一的解决方案。
信号有多种表示方式,例如信号编号 9 在 C 程序中通常写为 SIGKILL,而许多实用工具(如 kill)只接受 9 或 KILL(无 SIG 前缀),Expect 则接受所有三种形式(9、KILL 或 SIGKILL)。现代系统中常见的信号如下表所示:
| 信号名称 | 描述 |
| — | — |
| SIGHUP | 挂断 |
| SIGINT | 中断 |
| SIGQUIT | 退出 |
| SIGKILL | 终止 |
| SIGPIPE | 管道写入失败 |
| SIGTERM | 软件终止 |
| SIGSTOP | 停止(实际为“暂停”) |
| SIGTSTP | 键盘停止 |
| SIGCONT | 继续 |
| SIGCHLD | 子进程终止 |
| SIGWINCH | 窗口大小改变 |
| SIGUSR1 | 用户自定义 |
| SIGUSR2 | 用户自定义 |
如果有相应权限,可以使用 shell 脚本中的 kill 命令或 Expect 脚本中的 “exec kill” 来生成这些信号。例如,在 Expect 脚本中,以下命令向进程 1389 发送中断信号:
exec kill -INT 1389
超级会员免费看
订阅专栏 解锁全文
9万+

被折叠的 条评论
为什么被折叠?



