先用trap捕获信号,在当前bash运行如下命令:i-1;while((++i33));dotrapecho$ilog.txt$i;don 先用trap捕获信号,在当前bash运行如下命令: i=-1; while((++i >log.txt"$i; done 然后强制关闭终端,在另一终端查看
先用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
在外文的一个回答问题的网站上也问了一下: http://stackoverflow.com/questions/5546223/signals-received-by-bash-when-terminal-is-closed shell收到的信号和具体的操作系统是相关的,不同的系统产生的信号也不一致。如需彻底明晰地解释,将耗费很多精力,且意义不大。 但是有一点是可以确定的:在终端被关闭时,内核会给依赖于此终端的会话首进程(即此问中的bash)发个SIGHUP信号