如何在unix中获取被杀死进程的返回码?

时间:2013-04-09 19:27:05

标签: unix process kill sigterm

我有一个bash脚本,我通过将SIGTERM信号发送到它的进程ID来杀死正在运行的进程。但是,我想知道刚刚发送信号的过程的返回码。

这可能吗?

我不能使用'等待',因为杀死的过程不是从我的脚本开始的,我正在接收 “pid #####不是这个shell的孩子”

我在命令行中,在进程运行的控制台中进行了一些测试,在发送SIGTERM信号后(从另一个控制台),我检查了退出代码,它是143。 我想从不同的脚本中删除该进程并捕获该数字。

1 个答案:

答案 0 :(得分:3)

正如shellter所述,除了使用wait(或waitpid()等等)之外,您无法获取流程的退出代码,只有当您是它时才能这样做父节点。

但即使你可以,也要想一想:

当您向SIGTERM发送进程时,只会发生以下三种情况之一:

  • 该进程尚未为​​SIGTERM安装任何信号处理程序。在这种情况下,它会因信号而立即死亡。但在这种情况下退出代码是无趣的 - 你已经知道它是什么。在大多数平台上,它是143(128 +整数值SIGTERM),毫不奇怪地表明该进程已因SIGTERM而死亡。

  • 该流程已将SIGTERM配置为忽略。在这种情况下,没有任何反应,过程不会消失,因此无论如何都没有退出代码。

  • 该进程已为SIGTERM安装了信号处理程序。在这种情况下,将调用处理程序。处理程序可能会做任何事情:可能没有,可能立即退出,可能执行一些清理操作并稍后退出,可能是完全不同的东西。即使进程确实退出,这只是信号的间接结果,并且它会在以后发生,因此没有直接来自信号传递的退出代码。