linux - 一行获取进程的PID

标签 linux bash ffmpeg

我有一个由电话系统调用的 bash 脚本,该脚本从 URL 获取一些音频(使用 ffmpeg、mplayer 等),然后将其通过管道返回到应用程序。该文件可以有多个被调用的 URL,因此如果第一个 URL 脱机或给出 404,它将转到下一行。

我遇到一个问题,有时服务器会生成内容,但没有音频。在这种情况下,我想杀死 ffmpeg、mplayer 等的当前 PID,以便脚本继续前进。

我无法将其放在前台并获取最后一个 PID,因为一旦它在前台运行,媒体就不再通过管道传输到调用它的应用程序。我不能在开始时使用 exec,因为如果我随后向 PID 发出终止命令,脚本就会终止,这是我不希望的。

脚本看起来像这样:

#!/bin/bash

/usr/bin/ffmpeg  -i 'http://1.1.1.1/soft_music' -vn -ar 8000 -ac 1 -f s16le -
/usr/bin/ffmpeg  -i 'http://2.2.2.2/soft_music' -vn -ar 8000 -ac 1 -f s16le -

我假设我需要添加一些东西,让我能够记录当前运行的 ffmpeg 命令的 pid,以便我的外部脚本可以获取它并杀死它。完成后,它将转到下一行并尝试 2.2.2.2 中的下一个流

最佳答案

下面的脚本似乎可以满足我的要求:

#!/bin/bash

/usr/bin/ffmpeg  -i 'http://1.1.1.1/soft_music' -vn -ar 8000 -ac 1 -f s16le - & echo $! > /tmp/my_pid
%1
/usr/bin/ffmpeg  -i 'http://2.2.2.2/soft_music' -vn -ar 8000 -ac 1 -f s16le - & echo $! > /tmp/my_pid
%1

它的作用是将 ffmpeg 进程置于后台一会儿,以便将 PID 存储在文件中。一旦它进入下一行,我们就用作业 ID 恢复它,该 ID 将为 1。

关于linux - 一行获取进程的PID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47851545/

相关文章:

检查用户的输入是 C 中的 url 吗?

linux - 获取所有文件中的单词数

bash - bash脚本: syntax error near unexpected token `done'

compilation - 使用 ffmpeg 为视频添加字幕

android - 如何转换视频并以合理的处理时间导出新文件

linux - 巨大核心转储的 gdb 内存使用情况

c - 如何判断多个虚拟地址是否属于同一个页面?

ruby - puppet getvar() 函数不工作

python - 在 bash 脚本中间使用父目录 ".."规范化路径

video - ffmpeg:在不创建新文件的情况下将字幕添加到 mp4