我正在实现一个基于Unix的基本shell。 shell维护一个在后台运行的subprocess列表,并停止进程。
如果退出shell:
要么
请注意,我需要知道Unix shell的确切行为。 我在这里find了答案,但仍然没有谈到Unix shell的确切实现。
阅读更多关于SIGHUP
信号。 当控制终端退出时,该信号通常被发送到进程组中的所有进程。 在外壳的情况下,这通常在终端窗口关闭时发生。 信号的默认行为是终止进程。 这就是为什么nohup
这样的程序存在的原因。
为了编写一个真正的shell,你真的必须了解整个TTY子系统和信号是如何相关的。 推荐的文章是“TTY揭秘” 。
实际上SIGHUP
(信号编号为1
,(用于验证kill -l
))是信号,用于关闭所有在终端下运行的进程(我们可以说孩子),通过该终端发送这个信号给所有进程流程。
The SIGHUP signal is sent to a process when its controlling terminal is closed. It was originally designed to notify the process of a serial line drop (a hangup). In modern systems, this signal usually means that the controlling pseudo or virtual terminal has been closed.Many daemons will reload their configuration files and reopen their logfiles instead of exiting when receiving this signal.nohup is a command to make a command ignore the signal.