Как остановить набор процессов на Unix быстро?

find .

Хотя Вы, вероятно, хотели бы войти безотносительно ограничения параметров, Вам нужно.

7
27.10.2011, 08:05
5 ответов

Мой выбор pkill/pgrep

9
27.01.2020, 20:16

Вот немного сценария удара онлайн, который я использую:

ps auxwww | grep -v grep | grep -i $1 | awk '{print $2}' | xargs kill -9

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

  • ps auxwww печать все процессы с очень широким полем "команды"
  • grep -v grep есть ли для исключения себя из уничтожения
  • grep -i $1 соответствия все строки, которые содержат первый параметр
  • awk '{print $2}' захваты все идентификаторы процесса
  • xargs kill -9 уничтожает все выбранные процессы
3
27.01.2020, 20:16
  • 1
    +1 хороший конвейер, особенно одно использование xargs. –   27.10.2011, 08:12
  • 2
    я предпочитаю использовать fgrep(никакой regex) –  Prince John Wesley 27.10.2011, 08:14
  • 3
    Этот сценарий чрезмерно сложен по сравнению с pkill -9 -f $1. Кроме того, не советуйте использовать сигнал 9 (УНИЧТОЖАЮТ). Это - последнее средство способ остановить процесс, не тот, который должен обычно использоваться. –  jlliagre 27.10.2011, 08:34

Psdoom является действительно единственным способом уничтожить процесс. http://psdoom.sourceforge.net/

1
27.01.2020, 20:16

Очень быстрый способ убить несколько процессов (без необходимости писать скрипт)

USAGE: ./autokill.kl.sh <proc-name> => This will give you 5 seconds to change your mind and control-C out of the program.

USAGE: ./autokill.kl.sh <proc-name> now => This will immediately kill all processes matching the string/pattern you specified!!!

MODEL: ./autokill.kl.sh httpd

MODEL: ./autokill.kl.sh httpd now

MODEL: ./autokill.kl.sh httpd view => This will only show you the list of processes matching the pattern you specified.

Скрипт можно напрямую скачать здесь.

0
27.01.2020, 20:16

Я действительно предпочитаю использовать команду pgrep / pkill. Вот пример:

[root@testrhel7 ~]# pgrep -l http
2967 httpd
2968 httpd
2969 httpd
2970 httpd
2971 httpd
2972 httpd
[root@testrhel7 ~]#
[root@testrhel7 ~]# pkill -e http
httpd killed (pid 2967)
httpd killed (pid 2968)
httpd killed (pid 2969)
httpd killed (pid 2970)
httpd killed (pid 2971)
httpd killed (pid 2972)
[root@testrhel7 ~]#

Конечно, вы можете использовать цикл for:

[root@testrhel7 ~]# ps -ef  |grep http| grep -v grep
root       2989      1  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2990   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2991   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2992   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2993   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
apache     2994   2989  0 16:06 ?        00:00:00 /usr/sbin/httpd -DFOREGROUND
[root@testrhel7 ~]#

[root@testrhel7 ~]# for i in $(ps -ef | awk '/http/ {print $2}'); do kill -9 $i; done 

Я надеюсь это было полезным, счастливым убийством.

0
27.01.2020, 20:16

Теги

Похожие вопросы