关闭终端后bash接收的信号及其来源是什么?
- 内容介绍
- 文章标签
- 相关推荐
本文共计528个文字,预计阅读时间需要3分钟。
首先使用trap捕获信号,然后在当前bash运行以下命令:i=-1; while((++i)); do dotrapecho $i log.txt; done; done。然后强制关闭终端,在另一个终端查看结果。
5 个解决方案
#1
自己顶一下#2
EXIT是trap自己失败的一个信号,脚本退出时会触发这个信号 终端关闭时,内核会给登录shell发送一个SIGHUP SIGCHLD是因为登录shell的一个子进程退出导致的,应该是执行的某个命令结束了 SIGCONT不知道,通常是用于任务管理,用以让之前一个停止的命令继续运行#3
改正一下 EXIT是trap自己 识别的一个信号,脚本退出时会触发这个信号#4
引用2楼justkk的回复: EXIT是trap自己失败的一个信号,脚本退出时会触发这个信号 终端关闭时,内核会给登录shell发送一个SIGHUP SIGCHLD是因为登录shell的一个子进程退出导致的,应该是执行的某个命令结束了 SIGCONT不知道,通常是用于任务管理,用以让之前一个停止的命令继续运行 奇怪的是,我并没有运行什么子进程啊(用pstree确认过才关闭的终端)#5
在外文的一个回答问题的网站上也问了一下: stackoverflow.com/questions/5546223/signals-received-by-bash-when-terminal-is-closed shell收到的信号和具体的操作系统是相关的,不同的系统产生的信号也不一致。如需彻底明晰地解释,将耗费很多精力,且意义不大。 但是有一点是可以确定的:在终端被关闭时,内核会给依赖于此终端的会话首进程(即此问中的bash)发个SIGHUP信号本文共计528个文字,预计阅读时间需要3分钟。
首先使用trap捕获信号,然后在当前bash运行以下命令:i=-1; while((++i)); do dotrapecho $i log.txt; done; done。然后强制关闭终端,在另一个终端查看结果。

