加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

终端关闭时bash收到的信号

发布时间:2020-12-15 18:23:53 所属栏目:安全 来源:网络整理
导读:使用陷阱来捕获这样的信号: i=-1;while((++i33));do trap "echo $i log.txt" $i;done 并用力关闭终端. 然后log.txt中的内容(在redhat linux下): 1 18 1 17 0 这些信号来自哪里? 第一个信号是SIGHUP;当终端断开连接时,它会被发送到进程组中的所有进程(挂起
使用陷阱来捕获这样的信号:
i=-1;while((++i<33));
do
    trap "echo $i >> log.txt" $i;
done

并用力关闭终端.

然后log.txt中的内容(在redhat linux下):

1

18

1

17

0

这些信号来自哪里?

第一个信号是SIGHUP;当终端断开连接时,它会被发送到进程组中的所有进程(挂起 – 因此是HUP).

第二个信号是SIGCONT(谢谢,SiegeX,数字).这有点令人惊讶;它表明你有一份工作在后台停止,必须允许再次运行.

第三个信号是另一个SIGHUP.这很可能是为了确保继续流程能够退出,但却被发送到整个流程组. (有关过程组的信息,请参阅POSIX标准等).

第四个信号是SIGCHLD,表明子进程已经死亡并且尸体可用(嗯,状态可用).

最终信号0是壳内部伪信号,表示它正在退出.

你可以做:

trap 'echo Bye' 0

当shell出于任何原因退出控制时,回应’再见’.您选择将信号编号回显到文件中.由于shell在此时退出,这是最后看到的信号消息.其父进程应该获得SIGCHLD信号,因为shell死了.

FWIW,在MacOS X 10.6.7上,我运行了你的测试. MacOS X上没有信号32,有些映射不同,发送的信号序列也不同:

$i=-1;while((++i<33));
> do
>     trap "echo $i >> log.txt" $i;
> done
-sh: trap: 32: invalid signal specification
$trap
trap -- 'echo 0 >> log.txt' EXIT
trap -- 'echo 1 >> log.txt' HUP
trap -- 'echo 2 >> log.txt' INT
trap -- 'echo 3 >> log.txt' QUIT
trap -- 'echo 4 >> log.txt' ILL
trap -- 'echo 5 >> log.txt' TRAP
trap -- 'echo 6 >> log.txt' ABRT
trap -- 'echo 7 >> log.txt' EMT
trap -- 'echo 8 >> log.txt' FPE
trap -- 'echo 9 >> log.txt' KILL
trap -- 'echo 10 >> log.txt' BUS
trap -- 'echo 11 >> log.txt' SEGV
trap -- 'echo 12 >> log.txt' SYS
trap -- 'echo 13 >> log.txt' PIPE
trap -- 'echo 14 >> log.txt' ALRM
trap -- 'echo 15 >> log.txt' TERM
trap -- 'echo 16 >> log.txt' URG
trap -- 'echo 17 >> log.txt' STOP
trap -- 'echo 19 >> log.txt' CONT
trap -- 'echo 20 >> log.txt' CHLD
trap -- 'echo 23 >> log.txt' IO
trap -- 'echo 24 >> log.txt' XCPU
trap -- 'echo 25 >> log.txt' XFSZ
trap -- 'echo 26 >> log.txt' VTALRM
trap -- 'echo 27 >> log.txt' PROF
trap -- 'echo 28 >> log.txt' WINCH
trap -- 'echo 29 >> log.txt' INFO
trap -- 'echo 30 >> log.txt' USR1
trap -- 'echo 31 >> log.txt' USR2
$

一次运行中捕获的信号是:

2
1
20
0

在第二次运行中,我得到了:

20
1
20
0

SIGINT首先令人惊讶 – 我认为我不能解释它,除非它只是意味着某种类型的不完整写入(它应该读取20但是SIGHUP导致了问题).我不确定我是否可以解释SIGCHLD信号; SIGHUP和’退出’陷阱与以前一样.

但是,在某种程度上,信号是系统特定的 – 或者看起来如此.不过,SIGHUP很常见且不变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读