Java进程启动子进程并且主进程无法终止[关闭] Runtime.exec() 在执行在Windows控制台中工作的ffmpeg音频替换命令时冻结
温馨提示:
本文最后更新于 2024年04月12日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
我使用java Process来运行一个脚本,脚本的主进程启动一个子进程,并且子进程挂起,所以我无法监控脚本是否关闭。
Process process = processBuilder.command(commands).start();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) {
String line;
while ((line = reader.readLine()) != null) {
log.info("win exec get msg:{}", line);
}
}
// cannot be finished here
int exitCode = process.waitFor();
log.info("script exited with code: " + exitCode);
此命令执行一个 python 脚本,该脚本使用 ffmpeg 生成视频。
import subprocess
import time
import signal
command = "ffmpeg -framerate 5 -i F:\\screenshots\\screenshot_%04d.png -c:v libx264 -pix_fmt yuv420p -y F:\\website_recording.mp4"
p = subprocess.Popen(command, shell=True, close_fds=True)
pid = p.pid
time.sleep(10)
p.send_signal(signal.SIGTERM)
print("process finished")
问题是 ffmpeg 子进程附加到 java 启动的进程,因此在脚本退出时无法终止它。我必须先杀死 ffmpeg 子进程才能获得退出代码。
正文到此结束
- 本文标签: 家庭宠物
- 本文链接: https://www.coder6.net/article/2432
- 版权声明: 本文由蚂蚁原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权
热门推荐
-
浏览(193) 评论(0)