gpt4 book ai didi

linux - 当 OOM killer 杀死进程时返回代码

转载 作者:IT王子 更新时间:2023-10-29 00:50:28 25 4
gpt4 key购买 nike

我在使用 SUSE SLES 11 的 POWER7 系统上运行多道程序工作负载(基于 SPEC CPU2006 基准测试)。

有时,工作负载中的每个应用程序都会消耗大量内存,并且总内存占用量会超过系统中安装的可用内存 (32 GB)。

我禁用了交换,否则使用交换的进程的测量可能会受到严重影响。我知道内核通过 OOM killer 这样做可能会杀死一些进程。那完全没问题。问题是我希望被内核杀死的线程以错误条件退出(例如,进程被信号终止)。

我有一个启动所有进程然后等待它们使用的框架

waitpid(pid, &status, 0);

即使线程被 OOM killer 杀死(我知道,因为我在屏幕和/var/log/messages 中收到一条消息),调用

WIFEXITED(status);

返回一个,然后调用

WEXITSTATUS(status);

返回零。因此,我无法区分进程何时正确完成以及何时被 OOM killer 杀死。

我做错了什么吗?您知道什么方法可以检测进程何时被 OOM killer 杀死吗?

我找到了 this post问几乎相同的问题。然而,由于这是一个旧帖子并且答案并不令人满意,我决定发布一个新问题。

最佳答案

Linux OOM killer 通过发送 SIGKILL 来工作。如果您的进程被 OOM 终止,则 WIFEXITED 返回 1 是可疑的。

中学教育

To kill the selected process, the OOM killer delivers a SIGKILL signal.

因此您应该能够使用以下方法进行测试:

if (WIFSIGNALED(status)) {
if (WTERMSIG(status) == SIGKILL)
printf("Killed by SIGKILL\n");
}

关于linux - 当 OOM killer 杀死进程时返回代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7180970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com