终端关闭后bash接收了哪些信号,这些信号究竟是如何产生的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计525个文字,预计阅读时间需要3分钟。
首先使用trap捕获信号,在当前bash运行以下命令:`i=-1; while ((++i)); do dotrapecho $i log.txt; done; done`。然后强制关闭终端,在另一终端查看log.txt。
先用trap捕获信号,在当前bash运行如下命令:i-1;while((++i33));dotrapecho$ilog.txt$i;don 先用trap捕获信号,在当前bash运行如下命令: i=-1; while((++i<33));do trap"echo$i>>log.txt"$i; done 然后强制关闭终端,在另一终端查看log.txt,其内容为: 1 18 1 17 0 请教一下大家,这些信号因为什么、从何处、在何时发出的? 请不要答复这些数字对应了什么信号,我在此也一并列出: 0--EXIT 1--SIGHUP 17--SIGCHLD 18--SIGCONT 也请不要答复这些信号来自driver,有些笼统:)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信号本文共计525个文字,预计阅读时间需要3分钟。
首先使用trap捕获信号,在当前bash运行以下命令:`i=-1; while ((++i)); do dotrapecho $i log.txt; done; done`。然后强制关闭终端,在另一终端查看log.txt。
先用trap捕获信号,在当前bash运行如下命令:i-1;while((++i33));dotrapecho$ilog.txt$i;don 先用trap捕获信号,在当前bash运行如下命令: i=-1; while((++i<33));do trap"echo$i>>log.txt"$i; done 然后强制关闭终端,在另一终端查看log.txt,其内容为: 1 18 1 17 0 请教一下大家,这些信号因为什么、从何处、在何时发出的? 请不要答复这些数字对应了什么信号,我在此也一并列出: 0--EXIT 1--SIGHUP 17--SIGCHLD 18--SIGCONT 也请不要答复这些信号来自driver,有些笼统:)
