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?


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

5
Tidak ada hubungannya dengan ruang versus baris baru. Hanya karena kill tidak membaca argumen di stdin.
Mikel

@Mikel: Kesalahan saya, diperbaiki.
cuonglm


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)

Terima kasih banyak. Saya harap ini akan membantu pemula lain juga.
Tomáš Zato - Reinstate Monica
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.