Bisakah saya membuat rantai pgrep dengan kill?

31

Saya perhatikan bahwa |digunakan untuk mengirim hasil dari perintah pertama ke yang lain. Saya ingin membunuh semua proses yang sesuai dengan nama.
Inilah yang biasanya dilakukan pgrep:

$ pgrep name
5089
5105

Dan beberapa argumen tampaknya bekerja dengan kill:

sudo kill 5089 5105

Tapi ini salah:

pgrep name | kill

Jadi bagaimana cara melakukannya dengan benar?

Tomáš Zato - Pasang kembali Monica
sumber
3
pkill. Dan jika itu tidak ada, kill $(pgrep ...).
Mikel
Saya tidak hanya bertanya karena perintah-perintah khusus tetapi juga untuk mendapatkan pemahaman yang lebih baik dari perintah chaining. Tapi seperti yang bisa saya lihat dari skor pertanyaan, pertanyaan yang dimaksudkan untuk dipahami tidak diterima ...
Tomáš Zato - Reinstate Monica
Jika Anda ingin menjadikan pertanyaan lebih umum, dan memastikan itu bukan duplikat, saya dapat memberikan suara.
Mikel
Maaf, secara tidak sengaja menghapus komentar saya sebelumnya. Saya menggunakan tablet dan situs ini memiliki tombol yang sangat kecil di samping satu sama lain.
Mikel
Saya hanya mengatakan bahwa saya tidak memilih karena pertanyaan Anda sepertinya tidak menanyakan apa pun yang tidak dapat Anda pelajari man pgrep. Tombol downvote mengatakan itu untuk saat sebuah pertanyaan tidak menunjukkan upaya penelitian, dan saya tidak bisa melihatnya di pertanyaan Anda. Maaf jika itu tampak kasar.
Mikel

Jawaban:

42

Coba ini:

pgrep name | xargs kill

Jika Anda menggunakan pgrep name | kill, ouput pgrep namefeed untuk stdin kill. Karena killtidak membaca argumen dari stdin, jadi ini tidak akan berfungsi.

Menggunakan xargs, itu akan membangun argumen untuk killdari stdin. Contoh:

$ pgrep bash | xargs echo
5514 22298 23079
cuonglm
sumber
5
Tidak ada hubungannya dengan ruang versus baris baru. Hanya karena kill tidak membaca argumen di stdin.
Mikel
@Mikel: Kesalahan saya, diperbaiki.
cuonglm
17

Ini seharusnya bekerja:

pkill name

Saya juga menyarankan untuk membaca halaman manual.

Rouben Tchakhmakhtchian
sumber
5

Untuk menjawab pertanyaan umum ...

Pipa adalah untuk melewatkan output dari satu program sebagai input ke program lain.

Sepertinya Anda mencoba menggunakan output satu program sebagai argumen baris perintah ke program lain, yang berbeda.

Untuk melakukan itu, gunakan substitusi perintah .

Misalnya jika Anda ingin menjalankan

sudo kill 5089 5105

Dan Anda memiliki perintah pgrep nameyang menghasilkan5089 5105

Anda menempatkan mereka bersama seperti

sudo kill $(pgrep name)
Mikel
sumber
Terima kasih banyak. Saya harap ini akan membantu pemula lain juga.
Tomáš Zato - Reinstate Monica