开场白:历史已经成为过去,而过去的却已经埋藏在看不见的沙子里面,成为不了历史
代码存放:/mm/oom_kill.c 主函数: void out_of_memory(int gfp_mask) 主要功能如下: 1)调用select_bad_process(void)函数返回选择删除的进程的task_struct结构体 2)调用oom_kill_process(struct task_struct *p)函数对进程发出终止信号 辅助函数说明:select_bad_process(void) 遍历所有的进程(进程1除外),按照一定的算法统计出当前进程的预算值,将预算值最大的进程描述符返回。其中调用badness函数统计每个进程的预算值。 对于badness函数,将根据内存占用量,启动使用时间和CPU占用时间,是否是root权限进程,尤其是直接访问硬件,所以实际情况上,可能我们需要根据自己的系统进行修改。实际上这是非常有异常的。 辅助函数说明:oom_kill_process(struct task_struct *p) 并没有终止父进程,而是终止父进程中的一个子进程,然后就退出了,如果当前父进程没有子进程,尝试终止自己。所以终止的这个进程未必能够解决问题。当然很可能会被多次调用,但是不一定会解决问题。
时间: 2024-10-13 03:35:10