是否可以确定上次运行的应用程序收到的信号?

是否可以确定上次运行的应用程序收到的信号?

从 shell(例如 Bash)中,是否可以检索最近完成的应用程序收到的信号号(如果有),其方式类似于通过打印检查进程的返回代码$?

答案1

当一个进程被杀死时,杀死它的信号被编码在父进程(或子子收割器或init孤儿进程)检索的退出状态中。

在 中bash$?是 128+signum。

这就是大多数类似 Bourne 的 shell 所做的,ksh93 使用 256+signum,yash 使用 384+signum。

$?处于129bash一状态都意味着该进程被信号 1 (SIGHUP) 终止,或者它执行了exit(129).然而,如果它这样做了exit(129),最有可能的是通过 SIGHUP 报告某个进程的死亡。

要从 的值获取信号名称$?,请运行:

kill -l "$?"

这适用于所有类似 Bourne 的 shell,无论它们使用 128/256/384 + 符号。

详情请参阅进程终止时的默认退出代码?

相关内容