获取进程的PID在一行

问题描述 投票:-4回答:1

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

linux bash ffmpeg
1个回答
-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(将为1)恢复它。

© www.soinside.com 2019 - 2024. All rights reserved.