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

时间:2013-12-06 08:18:58

标签: php ruby-on-rails ruby linux process

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

我正在使用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)通过PHP脚本“ruby script_launcher.rb” 2)通过spawn函数,比如“sh -c ruby​​ actual_script.rb> / dev / null” 3)通过“ruby actual_script.rb”

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

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

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

1 个答案:

答案 0 :(得分:0)

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

相关问题