首页 > 解决方案 > 当我使用 wait=FALSE 调用 system() 时进程终止

问题描述

我正在尝试在 OpenCPU 上处理视频,因为它们非常大,我想使用“系统”调用“FFmpeg”进程并让它继续工作直到完成。但我需要获取 OpenCPU 创建的临时“文件目录”,以便我可以拉该目录,直到视频转换完成。为此,我使用参数 wait=FALSE 调用系统函数,如下所示

如果我在我的机器上使用库(opencpu),这可以正常工作,但是当我将它移到生产环境(Ubuntu 14.x)中时,系统调用在启动后会被中断。

这是可以使用 opencpu.confg 修复的吗?或者它是一个错误?

ffmpeg_exe <- "/usr/bin/ffmpeg" # Linux path

exec_convert <- paste0("( ",ffmpeg_exe,' -i ',input_file,' ',convert_command,' ',output_file, ' 2> PROCESS_OUTPUT.txt ;  ls > PROCESS_DONE.txt ',")")

system(exec_convert, wait=FALSE)

标签: opencpu

解决方案


我刚刚发现在 linux 上,OpenCPU 不允许这种行为,它会在请求返回时杀死所有子进程。这是故意的。它不希望孤儿进程可能永远在服务器上运行,opencpu 不是为此目的而设计的。


推荐阅读