Убить и перезапустить несколько процессов, которые соответствуют определенному шаблону - PullRequest
1 голос
/ 04 августа 2010

Я пытаюсь написать сценарий оболочки, который уничтожит все запущенные процессы, соответствующие определенному шаблону, а затем перезапустит их Я могу отобразить процессы с помощью:

ps -ef|grep ws_sched_600.sh|grep -v grep|sort -k 10

Что дает список соответствующих процессов:

user 2220258       1   0 16:53:12      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW02_env
user 5562418       1   0 16:54:55      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW03_env
user 2916598       1   0 16:55:00      -  0:01 /bin/ksh /../../../../../ws_sched_600.sh EDW04_env

Но я не слишком уверен, как передать идентификаторы процессов для уничтожения?

Ответы [ 3 ]

6 голосов
/ 04 августа 2010

sort не кажется необходимым. Вы можете использовать awk для печати второго столбца и xargs для преобразования вывода в аргументы командной строки в kill.

ps -ef | grep ws_sched_600.sh | awk '{print $2}' | xargs kill

В качестве альтернативы вы можете использовать pkill или killall, которые убивают на основе имени процесса:

pkill -f ws_sched_600.sh
1 голос
/ 04 августа 2010
pkill ws_sched_600.sh

Если вас беспокоит запуск вашей команды на нескольких платформах, где pkill может быть недоступен

ps -ef | awk '/ws_sched_600/{cmd="kill -9 "$2;system(cmd)}
0 голосов
/ 04 августа 2010

Я думаю, это то, что вы ищете

for proc in $(ps -ef|grep ws_sched_600.sh|sort -k 10)
do
    kill -9 proc
done

edit:

Конечно ... используйте Xargs, лучше.

...