Unix信号
编辑使用 Unix 操作系统时,信号是发送给正在运行的进程的系统消息。 信号是进程间通信的一种原始形式。 大多数信号也会引起一个动作——通常是进程的终止。 另一方面,其他人仅供参考(例如 SIGWINCH)或可以停止进程(SIGSTOP)。 还有一些信号可以由用户自由使用(SIGUSR1 和 SIGUSR2)。 一些信号可以被进程拦截或抑制。 所以抓住z。 例如,某些服务器程序(Unix 术语中的“守护进程”)读取 SIGUSR1 或 SIGUSR2,然后再次读入它们的配置文件。
常见的 UNIX 信号
编辑下面列出了常用信号及其编号。 支持的信号及其值可能因系统而异。 POSIX.1标准根据所使用的硬件架构提供不同的数值。
前缀 SIG 是信号的缩写。
kill -l 命令通常会列出所有支持的信号编号及其相关名称。 下表包含以下值作为示例:
- A 列:GNU C 库
- B 列:Linux、Alpha 和 SPARC 架构
- C 列:Linux、x86、AMD64、ARM 和大多数其他处理器架构
- D 列:Linux、MIPS
除了通常的 31 个信号编号外,较新的 Linux 版本还使用多达 32 个附加信号作为实时信号:从 SIGRTMIN、33、34 或 35(取决于 C 库)到 SIGRTMAX (64)。
动作
编辑信号可以触发以下操作之一:
- 停止(不是终止)进程。
- 恢复之前挂起的进程。
- 在不转储的情况下结束进程。 父进程可以确定信号编号。 该数字包含在 wait、waitpid 等函数的结果中。
- 通过写入内存转储结束进程。
在许多系统上,可以限制转储(例如在 bash 中通过 ulimit -c)。信号编号包含在转储中。 父进程可以像退出一样不转储得到信号号。
除了最后一个动作(信号处理程序)外,这些动作都显示为标准(默认)动作。
改变动作
编辑除了 SIGKILL 和 SIGSTOP 信号外,对信号的反应可以由进程设置。 这有几种可能性。 一种方法是在 System V 和 ANSI C 中通过信号函数实现的。这个函数可以从许多程序环境中访问,例如陷阱在通常的 shell 或 Python 编程语言中同名模块中的函数信号中。 此外,Berkeley Software Distribution (BSD) 中有一些选项可以阻止信号并稍后处理它们(sigvec 等)。 还有 POSIX 标准 (sigaction)。
信号由一个简单的数据类型表示,即数字,通常指定为符号常量。 笔译员或口译员确定符号的编号。 这允许将程序移植到其他 (Unix) 平台而无需更改符号。 POSIX 为不同的硬件平台指定了不同的信号编号。 信号编号由 signal.h、signal.py 等文件已知。
信号处理程序是一个简单的函数,它将信号编号作为参数。 BSD 和 POSIX 有额外的参数。 信号处理程序可以在程序中设置变量并调用函数(例如退出以结束进程)。
作为信号处理程序,上述函数知道特殊的符号常量:
- SIG_DFL 设置信号的正常默认操作。
- SIG_IGN 导致信号被忽略。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/366169/