【发布时间】:2017-11-04 20:14:11
【问题描述】:
我有一个sh 脚本,它在多个文件上调用ffmpeg。当我尝试在后台运行此脚本并将输出重定向到文件时,作业开始但随后立即暂停:
% bin/mp3convert.sh path/a/b &> ~/tmp/log.txt &
[1] 93352
%
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &>
如果我尝试让脚本在后台继续运行,它会立即再次挂起:
% jobs
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &>
% bg %1
[1] + continued bin/mp3convert.sh path/a/b &>
% jobs
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &>
%
我可以通过将其设为前台来使脚本继续运行,但随后我的终端将被占用,直到脚本完成。这意味着我无法在后台运行脚本。
%
[1] + suspended (tty output) bin/mp3convert.sh path/a/b &>
% fg %1
[1] + continued bin/mp3convert.sh path/a/b &>
% # much time passes with no activity on terminal, then script finishes
%
如何让脚本在后台干净利落地运行?
我的脚本的简化版本是:
#!/bin/sh
# mp3convert.sh
for f in "$1"/*.flac; do
ffmpeg -i "$f" -c:v copy path/to/dest/"$(basename -s .flac "$f")".mp3
done
我在 Mac OS X 10.11.6 上运行,ffmpeg version 3.4 由MacPorts 提供。
一个明显相关的问题是why do I get “Suspended (tty output)” in one terminal but not in others?。答案是用stty -tostop 设置终端状态。这对我没有帮助;我已经设置了那个状态。
【问题讨论】:
-
现在我已经按下了询问按钮,我突然想到这个问题可能更适合Super User。
标签: ffmpeg multiprocessing sh