我有一个bash脚本,我通过将SIGTERM信号发送到它的进程ID来杀死正在运行的进程。但是,我想知道刚刚发送信号的过程的返回码。
这可能吗?
我不能使用'等待',因为杀死的过程不是从我的脚本开始的,我正在接收 “pid #####不是这个shell的孩子”
我在命令行中,在进程运行的控制台中进行了一些测试,在发送SIGTERM信号后(从另一个控制台),我检查了退出代码,它是143。 我想从不同的脚本中删除该进程并捕获该数字。
答案 0 :(得分:3)
正如shellter所述,除了使用wait
(或waitpid()
等等)之外,您无法获取流程的退出代码,只有当您是它时才能这样做父节点。
但即使你可以,也要想一想:
当您向SIGTERM发送进程时,只会发生以下三种情况之一:
该进程尚未为SIGTERM
安装任何信号处理程序。在这种情况下,它会因信号而立即死亡。但在这种情况下退出代码是无趣的 - 你已经知道它是什么。在大多数平台上,它是143(128 +整数值SIGTERM
),毫不奇怪地表明该进程已因SIGTERM
而死亡。
该流程已将SIGTERM
配置为忽略。在这种情况下,没有任何反应,过程不会消失,因此无论如何都没有退出代码。
该进程已为SIGTERM
安装了信号处理程序。在这种情况下,将调用处理程序。处理程序可能会做任何事情:可能没有,可能立即退出,可能执行一些清理操作并稍后退出,可能是完全不同的东西。即使进程确实退出,这只是信号的间接结果,并且它会在以后发生,因此没有直接来自信号传递的退出代码。