Задача: Найти имя процесса по его PIDу и послать ему, например, SIGUSR1.Текущая реализация:
#!/usr/local/bin/bash
if [ -z "$1" ]; then
echo ""
echo "Usage: $0 daemon_name"
echo ""
exit
fipid=`ps -ax | grep $1 | grep -v grep | awk '{print $1}'`
echo "PID is $pid"
#if [ ! $pid ]; then
# echo "PID isn't active"
#else
# `kill SIGUSR1 $pid`
# exit
#fi
Проблема: grep отрабатывает честно, и грепит все процессы, которые включают в себя полученный аргумент. Т.е. хочу получить на выходе - "init", запускаю "./test.sh 1" и получаю список всех процессов, в id и именах которых есть единицы...Подскажите, как правильно поступить в моей ситуации?
>Задача: Найти имя процесса по его PIDу и послать ему, например, SIGUSR1.
>
>
>Текущая реализация:
>
>#!/usr/local/bin/bash
>
>if [ -z "$1" ]; then
> echo ""
> echo "Usage: $0 daemon_name"
> echo ""
> exit
>fi
>
>pid=`ps -ax | grep $1 | grep -v grep | awk '{print
>$1}'`
>
>echo "PID is $pid"
>
>#if [ ! $pid ]; then
># echo "PID isn't active"
>#else
># `kill SIGUSR1 $pid`
># exit
>#fi
>
>
>Проблема: grep отрабатывает честно, и грепит все процессы, которые включают в себя
>полученный аргумент. Т.е. хочу получить на выходе - "init", запускаю "./test.sh
>1" и получаю список всех процессов, в id и именах которых
>есть единицы...
>
>Подскажите, как правильно поступить в моей ситуации?а killall чем вас не устраивает ?
например :
# killall -v -USR1 -$pid
>а killall чем вас не устраивает ?
>например :
># killall -v -USR1 -$pidМеня устроит любой разумный вариант :о)
Проблема не в том, как послать сигнал, а как получить pid по заданному имени процесса. Нужно что-то типа квантификатора для grep'a :)
>>а killall чем вас не устраивает ?
>>например :
>># killall -v -USR1 -$pid
>
>Меня устроит любой разумный вариант :о)
>
>Проблема не в том, как послать сигнал, а как получить pid по
>заданному имени процесса. Нужно что-то типа квантификатора для grep'a :)pkill -<signame> <procname>
$ pkill -HUP inetd
$ pkill -KILL init// wbr
... а также невнимательных людей, забыл упомянуть, что у меня FreeBSD :)Соответственно, что такое pkill знать не знаю, ведать не ведаю...
>pkill -<signame> <procname>
>
>$ pkill -HUP inetd
>$ pkill -KILL init
>... а также невнимательных людей, забыл упомянуть, что у меня FreeBSD :)
>
>
>Соответственно, что такое pkill знать не знаю, ведать не ведаю...
>
>
>>pkill -<signame> <procname>
>>
>>$ pkill -HUP inetd
>>$ pkill -KILL initTak mozno:
ps ax | awk '{if(FNR==1){next}else{if($5~/<imja processa>/){print $1}}}'P.S. Pravda pridetca nemnogo podumat kak odnozna4no videlit imja processa
iz mnogih drugih. Podumai kakoje nibud regexp.
>>... а также невнимательных людей, забыл упомянуть, что у меня FreeBSD :)
>>
>>
>>Соответственно, что такое pkill знать не знаю, ведать не ведаю...
>>
>>
>>>pkill -<signame> <procname>
>>>
>>>$ pkill -HUP inetd
>>>$ pkill -KILL init
>
>Tak mozno:
>ps ax | awk '{if(FNR==1){next}else{if($5~/<imja processa>/){print $1}}}'
>
>P.S. Pravda pridetca nemnogo podumat kak odnozna4no videlit imja processa
>iz mnogih drugih. Podumai kakoje nibud regexp.простите, а что такое "FNR" и "/< >/" - если это границы слова, то всё-таки пожалуй "\< \>"
>>>... а также невнимательных людей, забыл упомянуть, что у меня FreeBSD :)
>>>
>>>
>>>Соответственно, что такое pkill знать не знаю, ведать не ведаю...
>>>
>>>
>>>>pkill -<signame> <procname>
>>>>
>>>>$ pkill -HUP inetd
>>>>$ pkill -KILL init
>>
>>Tak mozno:
>>ps ax | awk '{if(FNR==1){next}else{if($5~/<imja processa>/){print $1}}}'
>>
>>P.S. Pravda pridetca nemnogo podumat kak odnozna4no videlit imja processa
>>iz mnogih drugih. Podumai kakoje nibud regexp.
>
>простите, а что такое "FNR" и "/< >/" - если это границы слова, то всё-таки пожалуй "\< \>"
1) FNR - man awk
2) /<imja processa>/==/imja processa/. Primer /syslog/. Nikakih granic slov tam net. Odna e6e raz gvorju, dannij primer est tolko primer, i dla realnogo ispolzovanija nado to4neje opredelit regexp, dla togo 4tobi to4neje videlit process.
свечу фонариком :)
man psключ -o
пример ps -ax -o "command"
можно несколько -o
типа пример ps -ax -o "pid "-o "command"
-c тоже прикольный ключ :)grep " blablabla " - пробелы нужны чтобы грэпить только blablabla а не blablabla1,blablabla2 и т.д.
дальше сам разберешься :)
Спасибо всем за участие и предложенные варианты, особенно vitaly80 за самое простое направление поиска решения проблемы :)Остановился на:
ps -ax -p "445"
PID TT STAT TIME COMMAND
445 ?? Is 0:00,00 /usr/local/sbin/mpd -b -p /var/run/mpd.pidпри том, что
ps -ax -p "3445"
PID TT STAT TIME COMMAND
3445 ?? S 0:10,66 /usr/local/sbin/sshd2
Все остальное - дело техники :)Еще раз спасибо!