当前位置 : 主页 > 网络编程 > 其它编程 >

终端被关闭后,bash收到哪些信号,这些信号是怎么来的

来源:互联网 收集:自由互联 发布时间:2023-07-02
先用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信号
上一篇:c#中字段和属性的区别
下一篇:没有了
网友评论