URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3492
[ Назад ]

Исходное сообщение
"Как отсортировать вывод"

Отправлено Maxim , 19-Окт-04 02:13 
Задача: Найти имя процесса по его 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 и именах которых есть единицы...

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


Содержание

Сообщения в этом обсуждении
"Как отсортировать вывод"
Отправлено MaximKuznetsov , 19-Окт-04 02:37 
>Задача: Найти имя процесса по его 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



"Как отсортировать вывод"
Отправлено Maxim , 19-Окт-04 09:43 
>а killall чем вас не устраивает ?
>например :
># killall -v -USR1 -$pid

Меня устроит любой разумный вариант :о)

Проблема не в том, как послать сигнал, а как получить pid по заданному имени процесса. Нужно что-то типа квантификатора для grep'a :)


"Как отсортировать вывод"
Отправлено klalafuda , 19-Окт-04 09:56 
>>а killall чем вас не устраивает ?
>>например :
>># killall -v -USR1 -$pid
>
>Меня устроит любой разумный вариант :о)
>
>Проблема не в том, как послать сигнал, а как получить pid по
>заданному имени процесса. Нужно что-то типа квантификатора для grep'a :)

pkill -<signame> <procname>

$ pkill -HUP inetd
$ pkill -KILL init

// wbr


"Соблюдая лучшие традиции всех новичков... "
Отправлено Maxim , 19-Окт-04 10:38 
... а также невнимательных людей, забыл упомянуть, что у меня FreeBSD :)

Соответственно, что такое pkill знать не знаю, ведать не ведаю...


>pkill -<signame> <procname>
>
>$ pkill -HUP inetd
>$ pkill -KILL init


"Соблюдая лучшие традиции всех новичков... "
Отправлено Brainbug , 19-Окт-04 13:38 
>... а также невнимательных людей, забыл упомянуть, что у меня 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.


"Соблюдая лучшие традиции всех новичков... "
Отправлено _dima , 19-Окт-04 18:40 
>>... а также невнимательных людей, забыл упомянуть, что у меня 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" и "/< >/" - если это границы слова, то всё-таки пожалуй "\< \>"


"Соблюдая лучшие традиции всех новичков... "
Отправлено Brainbug , 20-Окт-04 10:05 
>>>... а также невнимательных людей, забыл упомянуть, что у меня 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.


"Как отсортировать вывод"
Отправлено vitaly80 , 20-Окт-04 08:18 
свечу фонариком :)
man ps

ключ -o
пример ps -ax -o "command"
можно несколько -o
типа пример ps -ax -o "pid "-o "command"
-c тоже прикольный ключ :)

grep " blablabla "  - пробелы нужны чтобы грэпить только blablabla а не blablabla1,blablabla2 и т.д.

дальше сам разберешься :)


"А ларчик просто открывался..."
Отправлено Maxim , 20-Окт-04 14:46 
Спасибо всем за участие и предложенные варианты, особенно 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


Все остальное - дело техники :)

Еще раз спасибо!