Bagaimana cara membunuh semua proses dengan nama yang diberikan?


16

Saya menjalankan perintah ps -A | grep <application_name>dan mendapatkan daftar proses seperti ini:

19440 ?        00:00:11 <application_name>
21630 ?        00:00:00 <application_name>
22694 ?        00:00:00 <application_name>

Saya ingin membunuh semua proses dari daftar: 19440, 21630, 22694.

Saya sudah mencoba ps -A | grep <application_name> | xargs kill -9 $1tetapi berfungsi dengan kesalahan.

kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>

Bagaimana saya bisa melakukan ini dengan anggun?

Jawaban:


25
pkill -f <application_na>

Akan membunuh semua proses yang mengandung pola <application_na>dalam nama mereka.

man pkill


9

Masalahnya adalah bahwa ps -A | grep <application_name> | xargs -n1mengembalikan output seperti ini

19440
?
00:00:11
<application_name>
21630
?
00:00:00
<application_name>
22694
?
00:00:00
<application_name>

Anda dapat menggunakan awkuntuk mendapatkan pertama kolom psoutput .

ps -A | grep <application_name> | awk '{print $1}' | xargs -n1

Akan mengembalikan daftar PID

19440
21630
22694

Dan menambahkan kill -9 $1Anda memiliki perintah yang membunuh semua PID

ps -A | grep <application_name> | awk '{print $1}' | xargs kill -9 $1

ini sempurna saya mengujinya pada skrip bash itu membunuh proseser segera tanpa kesalahan + bahkan jika proses tidak dimulai tidak menunjukkan kesalahan yang saya inginkan, di sini contoh pembunuh prosesor ffmpeg nano /usr/bin/ffmpegk ,. . . . ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1 . . . . chmod a+rx /usr/bin/ffmpegk
— Salem F

Saya punya masalah dengan ini di mana saya mendapatkan output kill -9jika tidak ada proses yang cocok
— Daniel F

1
Alih-alih grep, Anda harus menggunakan awkuntuk mencocokkan nama:ps -A | awk "\$4 == \"$1\" { print \$1; }"
— Toby Speight

0

killall dapat melakukannya.

$ killall application_name

Apakah membunuh semua mengizinkan ekspresi reguler dalam nama aplikasi?
— Łukasz D. Tulikowski

killall --regexp "appl.*me"Meskipun mungkin ada implementasi killall yang berbeda. Lihat man killall.
— rudimeier

Killall tidak cukup kadang-kadang saya perlu mengirimnya tiga kali untuk mematikan proses, dan bahkan gagal untuk membunuhnya, satu-satunya solusi yang bekerja cepat untuk saya adalah kill -9 pidsaya pikir @ ŁukaszD.Tulikowski adalah solusi kerja terbaik khusus untuk skrip bash.
— Salem F

-1
ps -eaf | grep -i applicationname| grep -iv 'grep'| awk '{print "kill -9" " "  $2}'|sh

Meskipun saya belum memberikan suara untuk pertanyaan ini, Anda belum menjelaskan mengapa ini berbeda atau lebih baik daripada solusi lain - yang sangat mirip dengan ini - atau menjelaskan mengapa OP mengalami kesulitan dengan variasi mereka.
— Jeff Schaller

-2

Pendekatan saya mirip dengan @ Łukasz D. Tulikowski. Alih-alih menggunakan grep <application_name>; Saya telah menggunakan grep "[a]pplication_name", yang tidak cocok dengan baris perintah prosesnya sendiri.

Ekspresi kurung siku adalah bagian dari greppencocokan pola kelas karakter. (Referensi) .


Anda dapat menggunakan awkuntuk mendapatkan pertama kolom psoutput.

ps -A | grep "[a]pplication_na" | awk '{print $2}' | xargs -n1

Akan mengembalikan daftar PID

7644
407
406

Kemudian menambahkan kill -9 $1Anda memiliki perintah yang membunuh semua PID

ps aux | grep "[a]pplication_na" | awk '{print $2}' | xargs kill -9 $1

Mengapa grepalih - alih menggunakan awkuntuk melakukan tes lebih benar? grepakan mencocokkan nama yang menyertakan target sebagai substring, misalnya.
— Toby Speight
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.