Чи можу я ланцюг pgrep з kill?


31

Я помітив, що |використовується для передачі результатів першої команди до іншої. Я хотів би знищити всі процеси, які відповідають імені.
Ось що зазвичай робить pgrep:

$ pgrep name
5089
5105

І кілька аргументів, здається, працюють із kill:

sudo kill 5089 5105

Але це неправильно:

pgrep name | kill

Так як це зробити правильно?


3
pkill. І якщо це не існує, kill $(pgrep ...).
Мікель

Я не тільки просив про них через ці конкретні команди, а й для того, щоб краще зрозуміти командування. Але як я бачу з оцінки запитань, питання, які слід зрозуміти, є небажаними ...
Томаш Зато - Відновити Моніку

Якщо ви хочете зробити питання більш загальним і переконатися, що воно не є дублікатом, я можу його проголосувати.
Мікель

Вибачте, випадково видалили мій попередній коментар. Я на планшеті, і на цьому сайті є дійсно маленькі кнопки поруч.
Мікель

Я просто говорив, що заявляв, що ваше запитання, здавалося, не задає нічого, з чого ви не могли б дізнатися man pgrep. Кнопка downvote говорить про те, що це означає, коли питання не докладає зусиль для дослідження, і я не міг бачити жодного у вашому запитанні. Вибачте, якщо це здалося суворим.
Мікель

Відповіді:


42

Спробуйте це:

pgrep name | xargs kill

Якщо ви використовуєте pgrep name | kill, вихід з pgrep nameподається в строгість kill. Тому killщо не читає аргументи зі stdin, тому це не вийде.

Використовуючи xargs, він будуватиме аргументи для killвід stdin. Приклад:

$ pgrep bash | xargs echo
5514 22298 23079

5
Нічого спільного з простором та новим рядком. Просто тому, що kill не читає аргументи на stdin.
Мікель

@Mikel: Моя помилка, виправлена.
cuonglm


5

Щоб відповісти загальним, а не конкретним ...

Труби призначені для передачі виводу з однієї програми як вхід до іншої програми.

Схоже, ви намагаєтеся використовувати вихід однієї програми як аргументи командного рядка іншій програмі, що відрізняється.

Для цього використовуйте підстановку команд .

Наприклад, якщо ви хочете запустити

sudo kill 5089 5105

І у вас є команда, pgrep nameяка виводить5089 5105

Ви складаєте їх як би

sudo kill $(pgrep name)

Дуже дякую. Сподіваюся, це допоможе і іншим новачкам.
Томаш Зато - Відновіть Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.