почему вывод pgrep в piping не работает

Я играю с трубками, чтобы узнать, как их использовать. Я пытаюсь эту команду убить процесс по имени: pgrep <some_process> | kill

, но вывод, который я получаю, является инструкцией по использованию для kill, так как он не получил никакого ввода.

, конечно, я знаю, что есть более простой способ выполнить ту же задачу, что и pkill или killall, но я хочу знать, почему это не работает.

Спасибо [ ! d3]

1
задан 2 November 2014 в 12:54

2 ответа

Как объяснил Флориан, kill ожидает ввода командной строки.

Чтобы обойти эту проблему, вы можете использовать

xargs для построения аргументов командной строки для команды, например pgrep vivaldi | xargs kill или еще лучше pgrep vivaldi | awk 'BEGIN{ORS=" "} 1' | xargs kill. Замена оболочки: kill $(pgrep vivaldi) killall, который выполняет почти ту же работу, что и pgrep и kill, например, killall vivaldi pkill, другая утилита для убийства на основе имени, например pkill vivaldi
2
ответ дан 24 May 2018 в 02:15
  • 1
    В чем смысл awk? Нет причин линять новую линию, труба пойдет на это. Кстати, вы могли бы также упростить его до awk -ORS=" " '1' – terdon♦ 1 October 2015 в 15:43
  • 2
    @terdon, так что вы говорите, что нет необходимости помещать все PID в одну строку? – Sergiy Kolodyazhnyy 1 October 2015 в 16:16

Для убийства программы по ее имени, если вы действительно знаете имя процесса, вы можете просто использовать команду skill <your process name>;

Теперь для труб хороший способ понять их с инструментами, такими как echo, more, less, tail, head и т. д. Существует много программ, которые действительно могут читать из трубы ... один, который я всегда использовал grep. [ ! d1]

0
ответ дан 24 May 2018 в 02:15

Другие вопросы по тегам:

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