這種行為的控制是通過調整進程相應目錄下的/proc/[PID]/oom_adj來實現的,其中oom_adj的取值返回是-17~15,當進程的oom_adj是-17時,系統將不會殺死它,-16到15使得進程的/proc/[PID]/oom_score值呈指數(K * 2 ^ n)形式遞增,也就是說他們被殺的可能性呈指數形式遞增。另外,開天辟地的第一個進程(進程號為1)init也不在被殺之列,無論它的oom_adj值為多少。原來只有系統資源管理權限(CAP_SYS_RESOURCE)的進程才能做oom_adj值的調整,現在如果是把進程的被殺可能性提高則不需要什麼特殊權限,我們也確實不應剝奪它自殺或者是它的擁有者有意把它推上懸崖的權利。
禁止進程被殺的具體操作為:
root@gentux xiaosuo # pgrep dbus-daemon 4595 6664 root@gentux xiaosuo # cat /proc/4595/oom_score 559 root@gentux xiaosuo # echo -17 > /proc/4595/oom_adj root@gentux xiaosuo # cat /proc/4595/oom_score 0
注意:這個技巧是比較危險的,除非你能100%肯定你禁止被殺的進程沒有問題,不然不要嘗試做愚蠢的設定,否則後果自負。