Bagaimana cara membunuh semua proses yang cocok dengan nama?


260

Katakanlah saya ingin membunuh setiap proses yang mengandung kata amarok. Saya dapat mencetak perintah yang ingin saya jalankan. Tapi bagaimana caranya membuat shell mengeksekusinya. yaitu.

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'
Output:
kill -9 3052
kill -9 3071
kill -9 3076
kill -9 3077
kill -9 3079
kill -9 3080
kill -9 3082
kill -9 3083
kill -9 3084
kill -9 3085
kill -9 3086
kill -9 3087
kill -9 3088
kill -9 3089
kill -9 4031

Tambahkan | sh -xsetelah sisa baris perintah Anda?
Jonathan Leffler

7
jangan pernah gunakan kill -9pada proses, lihat [manajemen proses] [1] [1]: mywiki.wooledge.org/… ...
Fredrik Pihl

Menambahkan ke komentar di atas bahwa tidak hanya membunuh -9 adalah ide yang buruk tetapi juga fakta bahwa Anda mencoba untuk membunuh banyak proses melalui nama mereka. Tidak ada yang unik tentang nama suatu proses dan karenanya merupakan kandidat yang buruk untuk identifikasi.
Raul-

Apakah itu akan membunuh amarokxproses juga? Saya pkill vi, itu membunuh supervisorctlyang mengandung `vi 'dalam kata.
Gank

4
Artikel tentang tidak menggunakan -9itu cukup tidak membantu - apakah ada informasi yang lebih baik tentang mengapa orang tidak boleh menggunakannya? Itu hanya mengatakan "jangan, dan pecat orang yang menggunakannya"; tetapi yang pernah saya lihat di tempat lain kill -9 {pid}adalah bagaimana cara membunuh sesuatu ...
dwanderson

Jawaban:


438

Dari man 1 pkill

-f     The pattern is normally only matched against the process name.
       When -f is set, the full command line is used.

Yang berarti, misalnya, jika kita melihat garis-garis ini di ps aux:

apache   24268  0.0  2.6 388152 27116 ?        S    Jun13   0:10 /usr/sbin/httpd
apache   24272  0.0  2.6 387944 27104 ?        S    Jun13   0:09 /usr/sbin/httpd
apache   24319  0.0  2.6 387884 27316 ?        S    Jun15   0:04 /usr/sbin/httpd

Kita dapat membunuh mereka semua menggunakan -fopsi pkill :

pkill -f httpd

1
Saya menyadari ini tidak mendukung subjek pertanyaan ini, tetapi ini menunjukkan metode alternatif, dan lebih pendek, untuk melakukan apa yang Anda coba lakukan.
Tim Bielawa

19
Untuk kekuatan ekstra, tambahkan -9sampai akhir!
mlissner

Apakah itu akan membunuh httpdxproses juga? Saya pkill vi, itu membunuh supervisorctlyang mengandung `vi 'dalam kata.
Gank

Luar biasa - Ubuntu 18.04.1 LTS
Salathiel Genèse

Untuk pertandingan yang tidak sensitif huruf -i, gunakan pkill -fi wine. Untuk memverifikasi sebelum dan sesudah, gunakan ps uax | grep -i wine.
gagak vulcan

207
ps aux | grep -ie amarok | awk '{print $2}' | xargs kill -9 

xargs (1): xargs - membuat daftar argumen dan menjalankan utilitas. Bermanfaat ketika Anda ingin memasukkan argumen ke sesuatu seperti killatau lsatau lebih.


3
Poin untuk menyebutkan xargs - semua hal pgrep / pkill ini semuanya sangat baik, tetapi xargs adalah alat tujuan umum, dan standar pada setiap linux / unix.
chrisdowney

4
"bunuh: Tidak ada proses seperti itu"
Cerin

3
Cerin itu karena sedang mencoba untuk membunuh proses grep juga, yang sudah selesai. Itu harus baik-baik saja.
Costi Muraru

6
Ada sedikit trik untuk menghindari menangkap proses grep: ps aux | grep -ie [a] marok | awk '{print $ 2}' | xargs kill -9
RCross

8
Anda juga dapat menambahkan panggilan grep lain untuk memfilter grep (menurut saya ini lebih mudah dibaca / diingat) ps aux | grep -ie amarok | grep -v grep | awk '{print $2}' | xargs kill -9 ( grep -vsingkatan grep --invert)
driftcatcher

47

menggunakan pgrep

kill -9 $(pgrep amarok)

26
bahkan lebih elegan:pkill -9 amarok
glenn jackman

1
pkill menangani bagian "setiap proses yang mengandung kata <word>" secara asli tanpa membuat lebih banyak pipa atau proses. Lihat opsi -f untuk pencarian nama proses lengkap untuk menghilangkan kebutuhan akan pgrep.
Tim Bielawa

2
Hati-hati karena pkill secara default memungkinkan pencocokan sebagian pada nama proses. Perintah ini juga akan membunuh amarok2 jika ada. Gunakan -x atau -f jika Anda ingin menentukan nama yang tepat.
user79878

Ini akan gagal jika tidak cocok untuk pgrep
alfredocambera

untuk penggunaan nama lengkapkill -9 $(pgrep -f amarok)
cinatic

27

Cara aman untuk melakukan ini adalah:

pkill -f amarok

1
Untuk menambah ini, saya menambahkan -lbendera. Aku sebenarnya hanya alias pkilluntuk pkill -fljadi saya dapat menjalankan sesuatu seperti pkill jbossdan itu akan meludahkan proses yang baru saja membunuh.
nland

Apakah itu akan membunuh amarokxproses juga? Saya pkill vi, itu membunuh supervisorctlyang mengandung `vi 'dalam kata.
Gank

Bagaimana ini berbeda dari jawaban atas (Tim)? Hanya cocok dengan nama contoh, jika tidak, terlihat sama? @ndland pkill: invalid option -- 'l'- pkill dari procps-ng 3.3.12
Xen2050

18

Saya pikir perintah killall ini persis apa yang Anda butuhkan. Perintah ini dideskripsikan sebagai "bunuh proses dengan nama". Mudah digunakan

killall chrome

Perintah ini akan mematikan semua proses Chrome. Berikut adalah tautan tentang perintah killall

http://linux.about.com/library/cmd/blcmdl1_killall.htm

Semoga perintah ini bisa membantu Anda.


Ini hanya cocok dengan nama, bukan baris perintah penuh. Jelas tidak sama dengan mencari ps auxkeluaran
Xen2050

12

pkill -x sama persis dengan nama proses.

pkill -x amarok

pkill -f serupa tetapi memungkinkan pola ekspresi reguler.

Perhatikan bahwa pkill tanpa parameter lain (misalnya -x, -f) akan memungkinkan kecocokan sebagian pada nama proses. Jadi "pkill amarok" akan membunuh amarok, amarokBanana, bananaamarok, dll.

Saya berharap -x adalah perilaku default!


Apakah itu akan membunuh amarokxproses juga? Saya pkill vi, itu membunuh supervisorctlyang mengandung `vi 'dalam kata.
Gank

@ Terima kasih, ya, nama proses dengan "amarok" di suatu tempat.
user79878

Bagaimana cara membunuh amarok bukan amarokx?
Gank

1
@ Gank, -x flag. pkill -x amarok
user79878

4

Jika Anda ingin mengeksekusi output dari sebuah perintah, Anda dapat memasukkannya ke dalam $(...), namun untuk tugas spesifik Anda lihatlah pada killalldan pkillperintah.


3

Anda juga dapat mengevaluasi output Anda sebagai sub-proses, dengan mengelilingi semuanya dengan kutu belakang atau dengan memasukkannya ke dalam $ ():

`ps aux | grep -ie amarok | awk '{print "kill -9 " $2}'`

 $(ps aux | grep -ie amarok | awk '{print "kill -9 " $2}')     

3

coba kill -s 9ps -ef |grep "Nov 11" |grep -v grep | awk '{print $2}' Untuk membunuh proses 11 November atau kill -s 9 ps -ef |grep amarok|grep -v grep | awk '{print $2}' Untuk membunuh proses yang mengandung kata amarok


0

Mungkin menambahkan perintah ke file yang dapat dieksekusi, mengatur + x izin dan kemudian mengeksekusi?

ps aux | grep -ie amarok | awk '{print "kill -9 " $2}' > pk;chmod +x pk;./pk;rm pk

-1

Jika Anda menggunakan cygwin atau shell minimal yang kurang killall Anda dapat menggunakan skrip ini:

killall.sh - Bunuh dengan nama proses.

#/bin/bash
ps -W | grep "$1" | awk '{print $1}' | xargs kill --

Pemakaian:

$ killall <process name>

Saya mendapatkankill: invalid argument f
rosstex

1
Coba ganti -f dengan -
Tony O'Hagan
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.