我有一个由电话系统调用的 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/