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 $1
tetapi berfungsi dengan kesalahan.
kill: illegal pid ?
kill: illegal pid 00:00:00
kill: illegal pid <application_name>
Bagaimana saya bisa melakukan ini dengan anggun?
nano /usr/bin/ffmpegk
,. . . .ps -A | grep ffmpeg | awk '{print $1}' | xargs kill -9 $1
. . . .chmod a+rx /usr/bin/ffmpegk
kill -9
jika tidak ada proses yang cocokgrep
, Anda harus menggunakanawk
untuk mencocokkan nama:ps -A | awk "\$4 == \"$1\" { print \$1; }"
killall
dapat melakukannya.sumber
killall --regexp "appl.*me"
Meskipun mungkin ada implementasi killall yang berbeda. Lihatman killall
.kill -9 pid
saya pikir @ ŁukaszD.Tulikowski adalah solusi kerja terbaik khusus untuk skrip bash.sumber
Pendekatan saya mirip dengan @
Łukasz D. Tulikowski
. Alih-alih menggunakangrep <application_name>
; Saya telah menggunakangrep "[a]pplication_name"
, yang tidak cocok dengan baris perintah prosesnya sendiri.Ekspresi kurung siku adalah bagian dari
grep
pencocokan pola kelas karakter. (Referensi) .Anda dapat menggunakan
awk
untuk mendapatkan pertama kolomps
output.Akan mengembalikan daftar PID
Kemudian menambahkan
kill -9 $1
Anda memiliki perintah yang membunuh semua PIDsumber
grep
alih - alih menggunakanawk
untuk melakukan tes lebih benar?grep
akan mencocokkan nama yang menyertakan target sebagai substring, misalnya.