当父进程不是root时,有什么方法可以确定子进程被SIGKILL杀死了。

问题描述 投票:0回答:1
我有一个非root(因此我无法读取内核日志)父进程及其子进程的情况,该子进程可能已被内核使用SIGKILL杀死,因为它消耗了大量内存。当发生这种情况时,父进程应该知道孩子是因为超出了内存限制而被杀死的(理想情况下),但是我什至不知道我是否能够弄清楚它是被SIGKILL杀死的,更不用说原因了。因此,我需要从父进程的角度了解孩子是否被SIGKILL杀害了,以及这是否是它发生的原因(但这是第二个问题)。

有人可以给我建议吗?谢谢。

我有一个非root(因此我无法读取内核日志)父进程及其子进程的情况,该子进程可能已被内核使用SIGKILL杀死,因为它消耗了大量内存。当它...

c unix kernel signals kill-process
1个回答
0
投票
您需要在孩子身上使用wait(2),并使用宏wait(2)检查它是否被信号终止。

0
投票
if (WTERMSIG(status) == SIGKILL) { ... } else if (WTERMSIG(status) == SIGTERM) { ... } waitXXX( )提供的状态使得可以确定孩子已被信号杀死:首先通过调用(see man page)进行检查,然后调用WIFSIGNALED(wstatus)确定信号编号。但是,您无法确定该进程是否被内核或另一个调用WTERMSIG(wstatus)的进程杀死。
© www.soinside.com 2019 - 2024. All rights reserved.