@ Jay: itu juga cukup sembarangan dalam pembunuhannya. Sangat mudah untuk disalahgunakan ...
thkala
1
@ Jay: Anda tidak akan meyakinkan saya :-). Saya telah dibakar berkali-kali oleh skrip pihak ketiga yang bersikeras menggunakan pkill- kesalahan yang paling umum adalah asumsi bahwa hanya satu instance dari setiap biner bisa ada pada waktu tertentu.
thkala
4
Untuk setiap pengguna Mac yang menemukan jawaban ini, seperti yang saya lakukan, padanan Mac adalah killall -m my_pattern.
Zev Eisenberg
1
Jika Anda memiliki sejumlah proses gantung yang tidak terbunuh, gunakan pkill -f -9 untuk tanpa ampun membunuh mereka
MacK
18
Saya sarankan menggunakan pgrepdulu untuk memverifikasi apa yang akan Anda bunuh. Anda dapat menggunakan pgrep -luntuk melihat nama proses atau pgrep -auntuk melihat baris perintah penuh. Ia menggunakan flag yang sama dengan pkill. Jadi dalam hal ini Anda bisa menggunakan pgrep -fa my_pattern.
studgeek
158
Bunuh semua proses yang cocok dengan string "myProcessName":
The ps -efmenghasilkan daftar id proses di komputer yang terlihat oleh pengguna ini. Pipa grep menyaring yang turun untuk baris yang berisi string itu. The grep -v grepmengatakan tidak cocok pada proses itu sendiri melakukan grepping tersebut. Cetak awk pipa mengatakan pisahkan baris pada spasi putih pembatas default dan filter ke kolom kedua yang merupakan id proses kami. Xargs pipa memutar proses baru untuk mengirim semua pid, untuk kill -9mengakhiri semuanya.
Kode di atas buruk, berbahaya, jelek dan diretas karena beberapa alasan.
Jika kode yang dipaksakan dihentikan adalah melakukan operasi basis data atau transaksi aman dengan kondisi ras probabilitas rendah, sebagian kecil dari persen waktu, atomitas dari transaksi itu akan hancur, menghasilkan perilaku yang tidak terdefinisi. membunuh -9 tidak membawa tahanan. Jika kode Anda peka terhadap hal ini, coba ganti xargs killbagian dengan bendera yang ditransmisikan yang meminta dimatikan dengan anggun, dan hanya jika permintaan itu ditolak, gunakan pilihan terakhir untukkill -9
Ada kemungkinan tidak nol bahwa Anda akan secara tidak sengaja mengakhiri sistem operasi atau menyebabkan perilaku tidak terdefinisi dalam proses yang tidak terkait, yang mengarah ke seluruh ketidakstabilan sistem karena ps -efmendaftar setiap proses yang mungkin ada, dan Anda tidak dapat memastikan beberapa perpustakaan pihak ketiga yang aneh membagikan kepada Anda nama proses, atau pada waktu antara membaca dan menjalankan kill -9, processid telah berubah menjadi sesuatu yang lain, dan sekarang Anda secara tidak sengaja mengakhiri beberapa proses acak yang tidak Anda inginkan.
Tetapi, jika Anda memahami risiko dan kontrol untuk mereka dengan nama yang sangat unik, dan Anda setuju dengan beberapa transaksi yang dijatuhkan atau korupsi data yang sesekali, maka 99,9% dari waktu Anda akan baik-baik saja. Jika ada masalah, reboot komputer, pastikan tidak ada proses tabrakan. Itu karena kode seperti ini yang membuat skrip dukungan teknis: "Sudahkah Anda mencoba me-restart komputer Anda" meme level 5.
Ini akan menimbulkan kesalahan jika tidak ada proses yang cocok dengan nama yang ditemukan. Anda mungkin ingin menggunakan ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs -r kill -9agar xargs tidak menjalankan perintah jika tidak ada argumen yang diberikan.
Epigene
2
Hanya sedikit modifikasi, mungkin lebih baik mengutip nama proses: ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9 Tanpa kutipan, hanya satu dari proses latar belakang saya yang terbunuh pada proses pertama. Menjalankannya lagi membunuh sisanya.
Ali Haider
-rOpsi tidak ada pada OS X, jadi sepertinya.
Danijel
52
Jika Anda membutuhkan lebih banyak fleksibilitas dalam memilih proses gunakan
-1 Anda tidak perlu loop, Anda bisa kill -9 `ps ax | awk '[m]y_pattern { print $1 }'`(perhatikan juga refactoring; lihat juga komentar saya pada jawaban @ synthesizerpatel).
tripleee
11
@tripleee Tidak ada masalah dengan downvote Anda, tapi Anda lakukan menyadari, bahwa OQ adalah "Aku ingin membunuh semua proses yang saya dapatkan dengan: ps aux | grep my_pattern" , yang saya dutyfully diterima.
Eugen Rieck
Bunuh akan membunuh semua proses dalam sekali jalan, Anda tidak perlu lingkaran untuk itu. Jika psmengembalikan tiga proses 123, 234, dan 345, Anda bisa kill 123 234 345seperti Anda bisa rmatau catbeberapa argumen file.
tripleee
@ tripleee Saya ment menghapusgrep
Eugen Rieck
for KILLPID in ps kapak | grep 'puma' | grep -v 'grep' | awk '{print $ 1;}' ; do kill -9 $KILLPID; doneakan menghapus grep
Justin E
18
Anda dapat menggunakan perintah berikut untuk mendaftar proses
ps aux | grep -c myProcessName
jika Anda perlu memeriksa jumlah proses itu kemudian jalankan
ps aux | grep -c myProcessName |grep -v grep
setelah itu Anda dapat mematikan proses menggunakan
Anda dapat menggunakan perintah berikut untuk mendaftar proses ps aux | grep -c myProcessName jika Anda perlu memeriksa jumlah proses itu kemudian jalankan ps aux | grep -c myProcessName | grep -v grep setelah itu Anda dapat mematikan proses menggunakan kill -9 $ (ps aux | grep -e myProcessName | awk '{print $ 2}')
Nived Thanima
13
Anda juga bisa menggunakannya killall -r my_pattern. -rMenafsirkan pola nama proses sebagai ekspresi reguler yang diperluas.
Jika Anda menilai pkill -f PATTERNagak terlalu berbahaya, saya menulis skrip bash ezkill yang meminta Anda untuk memilih proses mana di antara yang cocok dengan POLA yang ingin Anda bunuh.
Jika Anda tidak ingin pusing menemukan proses id, gunakan regexp untuk mematikan proses dengan nama. Misalnya, untuk membunuh chrome kode berikut ini akan melakukan trik.
yang terbaik dan paling aman untuk digunakan pgrep -fdengan kill, atau hanya pkill -f, greping pskeluaran 's bisa salah.
Tidak seperti menggunakan ps | grepdengan mana Anda perlu menyaring garis grep dengan menambahkan | grep -vatau menggunakan trik pola, pgreptidak akan memilih sendiri dengan desain.
Selain itu, jika pola Anda muncul di kolom ps's UID/ USER, SDATE/ STARTatau lainnya, Anda akan mendapatkan proses yang tidak diinginkan dalam output dan membunuh mereka, pgrep+ pkilljangan menderita dari cacat ini.
juga saya menemukan bahwa killall -r/-regexp tidak bekerja dengan ekspresi reguler saya.
Sementara kode ini dapat menjawab pertanyaan, memberikan konteks tambahan tentang bagaimana dan / atau mengapa memecahkan masalah akan meningkatkan nilai jangka panjang jawaban.
my_pattern
hanya substring nama, atau apakah itu mengandung karakter khusus regex?Jawaban:
Gunakan
pkill -f
, yang cocok dengan pola untuk bagian mana pun dari baris perintahsumber
pkill
- kesalahan yang paling umum adalah asumsi bahwa hanya satu instance dari setiap biner bisa ada pada waktu tertentu.killall -m my_pattern
.pgrep
dulu untuk memverifikasi apa yang akan Anda bunuh. Anda dapat menggunakanpgrep -l
untuk melihat nama proses ataupgrep -a
untuk melihat baris perintah penuh. Ia menggunakan flag yang sama dengan pkill. Jadi dalam hal ini Anda bisa menggunakanpgrep -fa my_pattern
.Bunuh semua proses yang cocok dengan string "myProcessName":
Sumber: http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9
Apa yang dilakukan kode ini?
The
ps -ef
menghasilkan daftar id proses di komputer yang terlihat oleh pengguna ini. Pipa grep menyaring yang turun untuk baris yang berisi string itu. Thegrep -v grep
mengatakan tidak cocok pada proses itu sendiri melakukan grepping tersebut. Cetak awk pipa mengatakan pisahkan baris pada spasi putih pembatas default dan filter ke kolom kedua yang merupakan id proses kami. Xargs pipa memutar proses baru untuk mengirim semua pid, untukkill -9
mengakhiri semuanya.Kode di atas buruk, berbahaya, jelek dan diretas karena beberapa alasan.
Jika kode yang dipaksakan dihentikan adalah melakukan operasi basis data atau transaksi aman dengan kondisi ras probabilitas rendah, sebagian kecil dari persen waktu, atomitas dari transaksi itu akan hancur, menghasilkan perilaku yang tidak terdefinisi. membunuh -9 tidak membawa tahanan. Jika kode Anda peka terhadap hal ini, coba ganti
xargs kill
bagian dengan bendera yang ditransmisikan yang meminta dimatikan dengan anggun, dan hanya jika permintaan itu ditolak, gunakan pilihan terakhir untukkill -9
Ada kemungkinan tidak nol bahwa Anda akan secara tidak sengaja mengakhiri sistem operasi atau menyebabkan perilaku tidak terdefinisi dalam proses yang tidak terkait, yang mengarah ke seluruh ketidakstabilan sistem karena
ps -ef
mendaftar setiap proses yang mungkin ada, dan Anda tidak dapat memastikan beberapa perpustakaan pihak ketiga yang aneh membagikan kepada Anda nama proses, atau pada waktu antara membaca dan menjalankan kill -9, processid telah berubah menjadi sesuatu yang lain, dan sekarang Anda secara tidak sengaja mengakhiri beberapa proses acak yang tidak Anda inginkan.Tetapi, jika Anda memahami risiko dan kontrol untuk mereka dengan nama yang sangat unik, dan Anda setuju dengan beberapa transaksi yang dijatuhkan atau korupsi data yang sesekali, maka 99,9% dari waktu Anda akan baik-baik saja. Jika ada masalah, reboot komputer, pastikan tidak ada proses tabrakan. Itu karena kode seperti ini yang membuat skrip dukungan teknis: "Sudahkah Anda mencoba me-restart komputer Anda" meme level 5.
sumber
ps -ef | grep myProcessName | grep -v grep | awk '{print $2}' | xargs -r kill -9
agar xargs tidak menjalankan perintah jika tidak ada argumen yang diberikan.ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
Tanpa kutipan, hanya satu dari proses latar belakang saya yang terbunuh pada proses pertama. Menjalankannya lagi membunuh sisanya.-r
Opsi tidak ada pada OS X, jadi sepertinya.Jika Anda membutuhkan lebih banyak fleksibilitas dalam memilih proses gunakan
Anda dapat menggunakan grep -e dll.
sumber
kill -9 `ps ax | awk '[m]y_pattern { print $1 }'`
(perhatikan juga refactoring; lihat juga komentar saya pada jawaban @ synthesizerpatel).ps
mengembalikan tiga proses 123, 234, dan 345, Anda bisakill 123 234 345
seperti Anda bisarm
ataucat
beberapa argumen file.grep
for KILLPID in
ps kapak | grep 'puma' | grep -v 'grep' | awk '{print $ 1;}'; do kill -9 $KILLPID; done
akan menghapus grepAnda dapat menggunakan perintah berikut untuk mendaftar proses
jika Anda perlu memeriksa jumlah proses itu kemudian jalankan
setelah itu Anda dapat mematikan proses menggunakan
sumber
Anda juga bisa menggunakannya
killall -r my_pattern
.-r
Menafsirkan pola nama proses sebagai ekspresi reguler yang diperluas.sumber
Jika Anda menilai
pkill -f PATTERN
agak terlalu berbahaya, saya menulis skrip bash ezkill yang meminta Anda untuk memilih proses mana di antara yang cocok dengan POLA yang ingin Anda bunuh.sumber
Anda dapat menggunakan perintah berikut untuk
sumber
Jika Anda tidak ingin pusing menemukan proses id, gunakan regexp untuk mematikan proses dengan nama. Misalnya, untuk membunuh chrome kode berikut ini akan melakukan trik.
killall -r --regexp chrome
sumber
-r
atau keduanya--regexp
, yang merupakan opsi pendek dan GNU, masing-masing.Anda dapat menggunakan perintah berikut untuk:
atau
Ini bekerja untuk saya.
sumber
Terdengar buruk?
contoh:
sumber
Menemukan cara terbaik untuk melakukannya untuk server yang tidak mendukung
pkill
Anda tidak perlu mengulang.
sumber
yang terbaik dan paling aman untuk digunakan
pgrep -f
dengankill
, atau hanyapkill -f
,grep
ingps
keluaran 's bisa salah.Tidak seperti menggunakan
ps | grep
dengan mana Anda perlu menyaring garis grep dengan menambahkan| grep -v
atau menggunakan trik pola,pgrep
tidak akan memilih sendiri dengan desain.Selain itu, jika pola Anda muncul di kolom
ps
'sUID
/USER
,SDATE
/START
atau lainnya, Anda akan mendapatkan proses yang tidak diinginkan dalam output dan membunuh mereka,pgrep
+pkill
jangan menderita dari cacat ini.juga saya menemukan bahwa
killall -r
/-regexp
tidak bekerja dengan ekspresi reguler saya.pkill -f "^python3 path/to/my_script$"
man pkill
sumber
Saya mengambil jawaban Eugen Rieck dan bekerja dengannya. Kode saya menambahkan yang berikut:
ps ax
termasuk grep, jadi saya mengecualikannya dengangrep -Eiv 'grep'
Saya telah membuat file, menamainya
killserver
, ini dia:Hasil
sumber
Begini caranya:
sumber