【问题标题】:Which process will be killed by kernel in case of memory over use? child or parent?如果内存过度使用,内核会杀死哪个进程?孩子还是父母?
【发布时间】:2013-12-06 08:18:57
【问题描述】:

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

我正在使用 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 Object 正在存储 spawned_process_id (进程号 2)的状态,但如果内核正在杀死进程号 3,那么我的逻辑给出了成功,这绝对是一个错误的情况。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 没有内核可以在内存使用过多的情况下杀死进程......它正在调用 OOM Killer 来执行此操作。
    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2020-08-07
    • 2018-09-08
    • 2016-11-09
    • 2014-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多