在内存过度使用的情况下,哪个进程将被内核杀死?孩子或父母


Which process will be killed by kernel in case of memory over use? child or parent?

让我在这里介绍一个小背景:

我正在使用shell_exec函数通过PHP启动一个ruby脚本(script_launcher.rb),在这个ruby脚本中我正在执行以下操作:

spawned_process_id = spawn("ruby actual_script.rb > /dev/null" ) 
Process.wait spawned_process_id

之后,根据Process::Status Object,我在ruby脚本中进行响应。

这将在服务器上启动三个进程:1) 通过"ruby script_launcher.rb"的PHP脚本2) 通过诸如"sh-c ruby actual_script.rb>/dev/null"之类的派生函数3) 通过"ruby actual_script.rb"

现在我的问题是,如果我的actual_script.rb占用了RAM中的大量内存,那么上面的哪个进程将被内核杀死。

这里的实际问题是Process::Status对象存储spawned_Process_id(进程号2)的状态,但如果内核正在杀死进程号3,那么我的逻辑会成功,这绝对是错误的情况。

任何解决方案或参考资料都会有所帮助。

如果没有特殊的配置,我不认为linux会自动终止进程。大多数情况下,当进程无法从系统中获得更多内存时,它会杀死自己(可能是不处理异常)。