我有一个 bash 脚本,我通过将 SIGTERM 信号发送到它的进程 ID 来终止正在运行的进程。但是,我想知道我刚刚发送信号的进程的返回码。
那可能吗?
我不能使用“等待”,因为要杀死的过程不是从我的脚本开始的,而且我收到“pid ##### 不是这个 shell 的孩子”
我在命令行中进行了一些测试,在运行进程的控制台中,在我发送 SIGTERM 信号(从另一个控制台)之后,我检查了退出代码,它是 143。我想从不同的脚本中终止进程并抓住那个号码。
正如shellterwait
所说,除了使用(or , etc...)之外,您无法获得进程的退出代码,waitpid()
并且只有当您是其父级时才能这样做。
但即使你可以,想想这个:
当您向进程发送 SIGTERM 时,只会发生以下三种情况之一:
该进程尚未为 安装任何信号处理程序SIGTERM
。在这种情况下,它会因信号而立即死亡。但在这种情况下,退出代码是无趣的——你已经知道它是什么了。在大多数平台上,它是 143(128 + 的整数值SIGTERM
),不出所料,表明进程由于SIGTERM
.
该进程已配置SIGTERM
为被忽略。在这种情况下,什么都不会发生,进程不会死掉,因此无论如何也没有退出代码可以获取。
该进程已为SIGTERM
. 在这种情况下,将调用处理程序。处理程序可能会做任何事情:可能什么都不做,可能立即退出,可能执行一些清理操作并稍后退出,可能完全不同。即使进程确实退出了,这也只是信号的间接结果,并且会在以后发生,因此没有退出代码可以直接从信号的传递中获得。