Получить PID из команды bash

Привет у меня есть команда bash для непрерывного запуска ffmpeg из сценария PHP, как я могу получить PID из процесса ffmpeg, который выполняется внутри команды bash. потому что я хочу остановить процесс ffmpeg и команду bash для конкретного PID, в настоящее время я уже получаю PID из команды bash и остановить весь процесс ffmpeg с помощью pkill ffmpeg,

Любые предложения, пожалуйста.

Спасибо

Вот мой код

public function playCam($ip)
{
$dataPlay = array();
$randomFolder = rand(5, 15);
$vidDir = '/var/www/cctv/public/video/'.$randomFolder.'/';
exec('mkdir '.$vidDir);
$bash_commands = '
while :
do
ffmpeg -y -rtsp_transport tcp -i rtsp://admin:FIW170845@'.$ip.':554/stream=2.sdp -vf scale=854:480 -r 3/1 -t 120 '.$vidDir.'ip-%01d.jpeg
done';
$pid = exec($bash_commands.' > /dev/null 2>&1 & echo $!; ', $output);
$dataPlay = [0 => $pid, 1 => $randomFolder];
return $dataPlay;
}

public function stopCam($pid,$folder)
{
shell_exec('kill '.$pid);
shell_exec('pkill ffmpeg');
$vidDir = "/var/www/cctv/public/video/".$folder.'/';
$del = File::deleteDirectory($vidDir);
return 'stoped';
exit();
}

0

Решение

Вы уже выводите PID вашего последнего фонового процесса, который называется ffmpeg, с помощью echo $! (увидеть руководство по bash). Это должно появиться в $output, но вы не получите его оттуда в настоящее время.

0

Другие решения

используйте этот однострочник:

for result in $(pgrep -a ffmpeg); do if [ "$(echo "$result" | grep "IP_TO_CHECK_FOR")" ]; then pkill $(echo "$result" | cut -d " " -f1); fi; done

сначала вы получите всю информацию обо всех процессах ffmpeg. затем вы проверите каждый из них для IP-адреса (измените шаблон, если сам IP-адрес недостаточен для проверки) и уничтожите PID конкретного процесса, извлекая его через cut (PID является первой частью вывода перед пробелом «»). поскольку grep также поддерживает регулярные выражения, вам может понадобиться разоблачить точки в вашем IP через \.

0

По вопросам рекламы [email protected]