让我在这里介绍一个小背景:
我正在使用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会自动终止进程。大多数情况下,当进程无法从系统中获得更多内存时,它会杀死自己(可能是不处理异常)。