LINUX.ORG.RU

Два процесса с одинаковыми именами, как прибить именно нужный?

 


0

1

Имеется два запускаемых sox'а иногда выходит так, что запущены оба одновременно, запускаются они из скрипта. Когда настает время их прибить начинается путаница со всеми вытекающими. Как можно четко идентифицировать процесс, чтобы потом именно его и прибить? При запуске брать pid и создавать что-то типа pid-файла? Или как-то еще? Короче говоря процесс не демон, как грамотно это сделать? Спасибо.

★★

Параметры разные передавать, потом смотреть командную строку процесса.

ilovewindows ★★★★★
()

При запуске брать pid

именно так.

goodwin ★★
()

как тебе удаётся запускать два sox с одинаковыми параметрами?
если этого не нужно, можно защититься запуская его через flock.
если ты не видишь параметры в выводе ps, посмотри на такой пример команды:

[br]ps -ef | grep [s]ox

bl ★★★
()
Последнее исправление: bl (всего исправлений: 1)

Если параметры разные - ps aux. Иначе только $! - pid хранить.

Tanger ★★★★★
()

Как можно четко идентифицировать процесс, чтобы потом именно его и прибить?

Если процессов всего два, то один из них был запущен раньше, другой — позже. pkill -o/-n sox. Если sox-ов больше, работать не будет придется делать по-нормальному — зная о pid запущенного процесса.

kawaii_neko ★★★★
()

Можно нужный прибить запускать из screen -e sox, а потом прибивать скрин.

Ygor ★★★★★
()
Ответ на: комментарий от bl

Ну там только отличается дата создания файла:

/usr/bin/sox -t alsa hw:0,0 /home/audio/`(date +%d_%m_%Y-%H.%M.%S)`.mp3
Соответственно ps -aux показывает процесс с именем файла, только уже с настоящим временем. Я кажется понял что надо делать, фиксировать дату в названии файла в переменную при запуске sox, а потом грепать по ней и прибивать.

yaba ★★
() автор топика
Ответ на: комментарий от yaba

А можно вопрос по процедуре? А сами то вы как узнаёте какой надо прибить? Если у вас bash, то можно сделать так:

exec -a sox1 sox ...

exec -a sox2 sox ...

vodz ★★★★★
()
Ответ на: комментарий от vodz

А можно вопрос по процедуре? А сами то вы как узнаёте какой надо прибить?

В том то и дело, что не знаю. У motion имеется два thread'а, в каждом есть свой start event и end event - вот они и дергают внешние скрипты. Если случилось так, что запущено два sox'a то по end event выполняется скрипт который посылает сигнал завершения процессу и если их два прихлопывается первый найденный, другой продолжает жить и какать на диск.

yaba ★★
() автор топика
Ответ на: комментарий от yaba

Если скрипты разные, то и пусть вызывают разные sox-ы, или через линк на sox или вон как раньше дал подсказку через exec -a name1+ kill `pidof name1`

vodz ★★★★★
()
Ответ на: комментарий от vodz

Спасибо, идея понравилась, вечерком попробую.

yaba ★★
() автор топика

обычно делаю что-то вроде pkill -f '^sox .*arg1' , но сама задача уже немного кривовата, часто лучше в родительском процессе не отправлять в фон и прибивать оттуда

anonymous
()
Ответ на: комментарий от teod0r

а зачем s в квадратных скобах?

Чтобы отфильтровать сам grep из списка процессов. Довольно обскурный такой хак -- греп с квадратными скобками в ps перестаёт совпадать со своей же регуляркой.

d_a ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.