Linux中的SIGHUP信号

305人浏览   2024-04-26 11:34:14

在 Linux 系统(以及其他类 Unix 操作系统)中,信号被用于进程间的通信。信号是一个发送到某个进程或同一进程中的特定线程的异步通知,用于通知发生的一个事件。从 1970 年贝尔实验室的 Unix 面世便有了信号的概念,而现在它已经被定义在了 POSIX 标准中。

在 Linux 中,理解信号的概念是非常重要的。这是因为,信号被用于通过 Linux 命令行所做的一些常见活动中。例如,每当你按 Ctrl+C 组合键来从命令行终结一个命令的执行,你就使用了信号。

在 Shell 命令行提示符 下,输入kill -l命令可以显示所有信号的信号值和相应的信号名。

历史上的SIGHUP

早期,人们使用终端(Terminal)通过串行线路(Serial Line)和RS232协议连接和控制大型计算机系统。当用户挂断(hanging up)调制解调器断开连接时就会产生一个SIGHUP信号发送给计算机程序。

在早期的实现中,没有用户自定义信号(例如后来添加的 SIGUSR1 和 SIGUSR2),因此计算机程序可以自己截取和解释收到的信号。有些守护程序(daemon),例如Apache 和 Sendmail 等,由于不需要控制终端,因此它们将 SIGHUP 解释为 重新读取配置文件或重新初始化

现在的SIGHUP

随着网络的流行,串行线路连接几乎消失,于是SIGHUP 的含义在现代系统上发生了一些变化,现在SIGHUP通常意味着控制伪终端或虚拟终端(pseudo or virtual terminal)已关闭。如果终端窗口关闭时仍然有命令在执行,那么命令进程就会收到 SIGHUP信号。SIGHUP 的默认操作是终止进程。也就是说,当终端关闭时,系统会终止所有它启动的正在运行的进程。

不过这通常并不适用于守护进程,因为守护进程通常必须继续运行。因此,那些 shell 启动的守护进程通常会忽略 SIGHUP 信号。它们通常立刻将控制权返回给 shell。如果它们没有返回,shell 脚本将永远等待守护进程退出。

与SIGHUP类似的一些信号

https://developer.ibm.com/articles/au-usingtraps/

  • SIGHUP - hangup or exit a foreground running process from a terminal
  • SIGINT - Ctrl-C from the keyboard
  • SIGQUIT - Ctrl-\ from the keyboard
  • SIGTERM - software termination signal


相关推荐