Как убить все процессы, соответствующие имени? - PullRequest
222 голосов
/ 17 июня 2011

Скажите, что я хочу убить каждый процесс, содержащий слово amarok. Я могу распечатать команды, которые хочу выполнить. Но как мне заставить оболочку выполнить их? то есть.

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031

Ответы [ 11 ]

368 голосов
/ 17 июня 2011

С man 1 pkill

-f     The pattern is normally only matched against the process name.
       When -f is set, the full command line is used.

Что означает, например, если мы увидим эти строки в ps aux:

apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

Мы можем убить их всех, используя pkill -f опция:

pkill -f httpd
188 голосов
/ 17 июня 2011
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs (1): xargs - составить список аргументов и выполнить утилиту.Полезно, если вы хотите передать аргументы к чему-то вроде kill или ls или около того.

45 голосов
/ 17 июня 2011

использование pgrep

kill -9 $(pgrep amarok)
25 голосов
/ 01 ноября 2013

Безопасный способ сделать это:

pkill -f amarok
17 голосов
/ 08 сентября 2013

Я думаю, что эта команда killall именно то, что вам нужно. Команда описывается как «убить процессы по имени». Она проста в использовании. Например

killall chrome

Эта команда уничтожит весь процесс Chrome. Вот ссылка на команду killall

http://linux.about.com/library/cmd/blcmdl1_killall.htm

Надеюсь, эта команда поможет вам.

11 голосов
/ 13 февраля 2014

pkill -x точно соответствует имени процесса.

pkill -x amarok

pkill -f похож, но допускает шаблон регулярного выражения.

Обратите внимание, что pkill без других параметров (например, -x, -f) разрешит частичное совпадение имен процессов. Так что "pkill amarok" убил бы амарок, амарок банан, бананамарок и т. Д.

Хотелось бы, чтобы -x был поведением по умолчанию!

4 голосов
/ 17 июня 2011

Если вы хотите выполнить вывод команды, вы можете поместить ее в $(...), однако для вашей конкретной задачи посмотрите на команды killall и pkill.

3 голосов
/ 14 ноября 2016

try kill -s 9 ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}' Для уничтожения процессов 11 ноября или kill -s 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}' Для уничтожения процессов, содержащих слово amarok

3 голосов
/ 17 июня 2011

Вы также можете оценить свой вывод как подпроцесс, окружив все обратными галочками или поместив его в $ ():

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     
0 голосов
/ 16 мая 2018

Если вы используете cygwin или какую-то минимальную оболочку, в которой отсутствует killall, вы можете просто использовать этот скрипт:

killall.sh - убить по имени процесса.

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill -f;

Использование:

$ killall <process name>
...