从 shell(例如 Bash)中,是否可以检索最近完成的应用程序收到的信号号(如果有),其方式类似于通过打印检查进程的返回代码$?
。
答案1
当一个进程被杀死时,杀死它的信号被编码在父进程(或子子收割器或init
孤儿进程)检索的退出状态中。
在 中bash
,$?
是 128+signum。
这就是大多数类似 Bourne 的 shell 所做的,ksh93 使用 256+signum,yash 使用 384+signum。
$?
处于129
任bash
一状态都意味着该进程被信号 1 (SIGHUP) 终止,或者它执行了exit(129)
.然而,如果它这样做了exit(129)
,最有可能的是通过 SIGHUP 报告某个进程的死亡。
要从 的值获取信号名称$?
,请运行:
kill -l "$?"
这适用于所有类似 Bourne 的 shell,无论它们使用 128/256/384 + 符号。
详情请参阅进程终止时的默认退出代码?