Так что иногда ffmpeg зависает, и мне нужно посмотреть на системный монитор и команду, используемую им, чтобы найти конкретный процесс и убить его.
Существует ли более простой способ / bash-скрипт, чтобы просто сказать ./scipt blabla, где blabla - это часть команды, используемой в ffmpeg -i ..... blabla, и когда она будет найдена, она должна быть убита или что-то, что возвращает PID, так что я могу вручную просто pkill идентификатор процесса? вместо ручной прокрутки через все активные процессы ffmpeg и используемые ими команды.
У меня все получилось:
ps -Af | grep '/root/bin/ffmpeg.*blabla' | grep ? | awk '{print $2}' | xargs sudo kill -15
Но что, если команда даст мне 2 пид?
Это даст Вам идентификатор (идентификаторы) процесса ffmpeg
команда:
pgrep -x ffmpeg
, Но можно непосредственно уничтожить его с помощью pkill
:
pkill -x ffmpeg
Указывают сигнал (значение по умолчанию является SIGTERM), например,
pkill -x -9 ffmpeg
<час> , Почему -x
:
pgrep
/ pkill
соответствия шаблон, поэтому если Вы не добавляете -x
опция (точное совпадение), она будет соответствовать также thisisnotffmpeg
.
Вам, возможно, понадобилось бы -f
для соответствия полной команде вместо имени процесса только, например, если у Вас есть приблизительно [1 112] команда, работающая, от которого Вы только хотите уничтожить определенные, заканчивающиеся [1 113]:
pkill -f '^ffmpeg.*blabla
ps -Af | grep '/root/bin/ffmpeg.*blabla' | grep ? | awk '{print $2}' | xargs sudo kill -15
заставил его работать! но что, если я заканчиваю с двумя pids? и Easies был бы./сценарием blabla, куда bla bla помещается в код, и он выполняется.
, Кажется, также работает, когда результатом являются несколько pids :P
Заключительный сценарий:
#!/bin/sh
# $1 is process name
if [ $# -ne 1 ];
then
echo "Invalid number of arguments"
exit 0
fi
grepme="/root/bin/ffmpeg.*"$1""
ffmpegrunning=$(ps -Af | grep "$grepme" | grep ? | awk '{print $2}')
if [ -z "$ffmpegrunning" ]
then
echo "There is no active " $1 " process..."
else
thisrunning=$(ps -Af | grep "$grepme" | grep ? | awk -v FS="(/input/ffmpeg|.ts)" '{print $3}')
ffmpegrunning=$(ps -Af | grep "$grepme" | grep ? | awk '{print $2}'| xargs sudo kill -15)
echo $ffmpegrunning " " $thisrunning "rebooted..."
fi
Только вещь состоит в том, когда она перезагружает, больше чем один инстанцирует эхо, вместо подводят итог того, чтобы иметь введение в позади подобного: 12123 2 222 bla blabla
я хотел бы 12123 bla, перезагруженные, 2222 blabla перезагрузили