让我在这里介绍一个小背景:
我正在使用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,那么我的逻辑会成功,这绝对是一个错误的情况。
任何解决方案或参考都会有所帮助。
答案 0 :(得分:0)
如果没有特殊配置,我认为linux不会自动终止进程。 大多数情况下,当系统无法从系统中获取更多内存时,它就会杀死(可能不处理异常)。