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

Вы могли сделать так путем контроля журнала связывать-сервера (вход запроса должен быть включен).Удачи...

2
05.12.2012, 08:52
4 ответа

Если Ваша команда производит список PIDs, то просто передают его по каналу в:

xargs kill

Обратите внимание, что Ваша команда будет соответствовать команде grep также, поэтому рассмотрите добавление чего-то как |grep -v grep перед оригиналом grep команда.

4
27.01.2020, 21:53
  • 1
    Другая идиома, чтобы не иметь сам grep в списке должна использовать "grep' [f] oo'" вместо "grep 'нечто'". Не может ввести одинарные левые кавычки на этой клавиатуре андроида, раздражающе. –  dubiousjim 05.12.2012, 03:48

Просто используйте pkill. Хотя не стандартная команда, это найдено во многих Нельдах и выделено этому виду задач.

pkill -f 'vmstat 1'

Также обратите внимание что Ваш grep будет соответствовать vmstat 1 но также и vmstat 10 и grep vmstat 1 (так был бы это pkill выше), и awk надмножество grep. Чтобы быть более устойчивыми, Вы могли сделать вместо этого:

ps -Ao pid,args | awk '$2 == "vmstat" && $3 == "1" {print $1}' | xargs kill

Или

pkill -xf 'vmstat 1'
4
27.01.2020, 21:53
  • 1
    Просто используйте pkill …, если у Вас есть он! Я - L, может не запускать Linux. –  Gilles 'SO- stop being evil' 06.12.2012, 01:11
  • 2
    @Gilles. pkill не является изобретением Linux. Я полагаю, что это произошло в Солярисе, и это также найдено, по крайней мере, в FreeBSD, NetBSD. Но это верно, что это не стандартная команда, я добавлю примечание. –  Stéphane Chazelas 06.12.2012, 01:28
  • 3
    “ pkill и pgrep утилиты сначала появился в NetBSD 1.6. Они смоделированы после утилит того же имени, которое появилось в Sun Solaris 7. Они сделали свое первое выступление в FreeBSD 5.3”. Также OpenBSD 3.5. Быстро превращенный его путь в Linux. Не фактический стандарт, потому что это отсутствует в OSX. –  Gilles 'SO- stop being evil' 06.12.2012, 01:41
  • 4
    pkill на самом деле не является плохой идеей также, попробовал его, и это работало как очарование. –  I AM L 06.12.2012, 07:56

Если Вы уже используете awk, можно сделать

ps -ef | grep "vmstat 1" | awk '!/grep/{ print "kill " $2 }' | bash

Это произведет список команд уничтожения, и поскольку каждые из команд уничтожают единственный процесс, Вы не будете сталкиваться с потенциальным списком аргументов слишком долго (хотя это очень маловероятно при осмотре через выполнение процессов), и я добавил шаблон, чтобы не соответствовать самому процессу grep как уничтожение, это может прервать список.

0
27.01.2020, 21:53
  • 1
    Вы можете (и если) избавляются от grep в этом случае: ps -ef | awk '/vmstat 1/ { print "kill " $2 }' | bash –  otokan 05.12.2012, 21:42
  • 2
    "!/grep /" избавляется от grep. –  Didi Kohen 06.12.2012, 08:10
  • 3
    Вы не должны использовать команду grep вообще в этом случае. –  otokan 06.12.2012, 10:23

Все просто как:

$ kill -9 $(pgrep -f vmstat)
-1
27.01.2020, 21:53

Теги

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