Unix信号

编辑
本词条由“匿名用户” 建档。

使用Unix操作系统时,信号是发送给正在运行的进程的系统消息。信号是进程间通信的一种原始形式。大多数信号也会引起一个动作——通常是进程的终止。另一方面,其他人仅供参考(例如SIGWINCH)或可以停止进程(SIGSTOP)。还有一些信号可以由用户自由使用(SIGUSR1和SIGUSR2)。一些信号可以被进程拦截或抑制。所以抓住z。例如,某些服务器程序(Unix术语中的“守护进程”)读取SIGUSR...

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)。信号编号包含在转储中。 父进程可以像退出一样不转储得到信号号。

  • 忽略信号。
  • 调用一个子程序(信号处理器)来处理信号,这叫做拦截。 信号处理程序必须在发出信号之前由进程设置。 信号处理程序在进程内运行,可以访问进程的数据

除了最后一个动作(信号处理程序)外,这些动作都显示为标准(默认)动作。

Unix信号

改变动作

编辑

除了 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/

(5)
词条目录
  1. Unix信号
  2. 常见的 UNIX 信号
  3. 动作
  4. 改变动作

轻触这里

关闭目录

目录