fork/exec
- правильное решение. Поскольку разветвленные процессы наследуют дескрипторы файлов fopen родительских процессов / и т. Д., Вам придется закрыть (или перенаправить) дескрипторы файлов, которые вы не хотите использовать дочерними процессами.
Например:
# this will print nothing, but yes is running as a forked process
# you'll want to `killall yes` after running this script.
fork do
[$stdout, $stderr].each { |fh| fh.reopen File.open("/dev/null", "w") }
exec "yes"
end
Хорошо, некоторые комментарии к коду, который вы разместили. Внешнее fork
бессмысленно. Просто разветвите два процесса ffmpeg из основного процесса. Может быть, напишите вспомогательную функцию, например:
def ffmpeg(mp4)
fork do
[$stdout, $stderr].each { ... }
exec "ffmpeg -i #{mp4} ..."
end
end
ffmpeg("you-know.mp4")
ffmpeg("bangbang.mp4")