获取流程的PID在一行

时间:2017-12-17 01:42:01

标签: linux bash ffmpeg

我有一个由电话系统调用的bash脚本,它从URL获取一些音频并(使用ffmpeg,mplayer等)然后将其传回给应用程序。该文件可以有几个被调用的URL,所以如果第一个说出线或给出404,它将转到下一行。

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

我无法前置它并获得最后一个PID,因为一旦它在前台运行,媒体就不再被管道传送到调用它的应用程序了。我不能在开始时使用exec,因为如果我然后向PID发出一个kill脚本死掉我不想要的。

脚本看起来像这样:

#!/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

中的下一个流

1 个答案:

答案 0 :(得分:-1)

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

#!/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。