Jika Anda memerlukan lebih banyak fleksibilitas dalam memilih proses, gunakan
for KILLPID in `ps ax | grep 'my_pattern' | awk ' { print $1;}'`; do
kill -9 $KILLPID;
done
Anda dapat menggunakan grep -e dll.
Bunuh semua proses yang cocok dengan string "myProcessName":
ps -ef | grep 'myProcessName' | grep -v grep | awk '{print $2}' | xargs -r kill -9
Sumber:http://www.commandlinefu.com/commands/view/1138/ps-ef-grep-process-grep-v-grep-awk-print-2-xargs-kill-9
Mengapa "ps pipe kill" dari terminal jahat:
Perpipaan bilangan bulat yang Anda ambil dari ps -ef
ke kill -9
buruk, dan Anda seharusnya merasa tidak enak, dua kali lipat jika Anda adalah root atau pengguna dengan hak istimewa yang lebih tinggi, karena itu tidak memberi proses Anda kesempatan untuk mematikan koneksi soket dengan bersih, membersihkan file temp, memberi tahu anak-anaknya bahwa itu akan dihapus atau menyetel ulang karakteristik terminalnya.
Alih-alih kirim 15, dan tunggu satu atau dua detik, dan jika itu tidak berhasil, kirim 2, dan jika tidak berhasil, kirim 1. Jika tidak, HAPUS BINARI karena program berperilaku buruk.
Sebagai prinsip umum, kami tidak menggunakan Unix Railgun untuk memangkas pagar tanaman. https://porkmail.org/era/unix/award.html#kill
Penjelasan perintah di atas:
ps -ef
menghasilkan daftar id proses di komputer yang terlihat oleh pengguna ini. Filter pipa grep yang turun untuk baris yang berisi string itu. grep -v grep
mengatakan tidak cocok dengan proses itu sendiri yang melakukan grepping. Cetak awk pipa mengatakan membagi baris pada spasi pembatas default dan memfilter ke kolom kedua yang merupakan id proses kami. xargs pipa menjalankan proses baru untuk mengirim semua pid itu ke kill -9
, mengakhiri semuanya.
Mengapa ps pipe kill
buruk, berbahaya, jelek, dan retas:
-
Ada kemungkinan kecil bahwa Anda akan mengakhiri sistem operasi secara tidak sengaja atau menyebabkan perilaku yang tidak terdefinisi dalam proses yang tidak terkait, yang menyebabkan ketidakstabilan sistem secara keseluruhan karena
ps -ef
daftar ribuan proses, dan Anda tidak dapat memastikan bahwa beberapa proses pihak ke-3 membagikan nama proses Anda, atau bahwa pada waktu antara membaca dan mengeksekusi kill -9, processid telah berubah menjadi sesuatu yang lain, dan sekarang Anda telah mengakhiri beberapa proses acak proses yang diperlukan tidak terkait dengan proses Anda. -
Jika kode yang diakhiri secara paksa melakukan operasi basis data apa pun atau mengamankan transaksi dengan kondisi balapan probabilitas rendah, beberapa persen dari waktu, atomisitas transaksi itu akan rusak, menghasilkan perilaku yang tidak terdefinisi. kill -9 tidak mengambil tahanan. Jika kode Anda peka terhadap hal ini, coba ganti
xargs kill
bagian dengan flag yang ditransmisikan yang meminta penonaktifan yang baik, dan hanya jika permintaan itu ditolak, pilihan terakhir untukkill -9
Tapi, jika Anda memahami semua risiko dan mengendalikannya dengan nama yang unik, dan Anda baik-baik saja dengan beberapa transaksi yang gagal atau korupsi sesekali, maka 99,9% dari waktu Anda akan baik-baik saja. Jika ada masalah, reboot komputer, pastikan tidak ada tabrakan proses. Karena kode seperti inilah yang membuat skrip dukungan teknis:"Sudahkah Anda mencoba me-restart komputer Anda" menjadi meme level 5. "Rogue Rogue menggores ps
untuk menemukan bilangan bulat dan mengirimkannya ke kill -9
, jadi nyalakan ulang komputer untuk menyelesaikan masalah.
Mengapa tidak menggunakan pkill
saja mana yang lebih mudah?
Di atas memberi saya kontrol manual karena ps
, grep
, awk
, kill
dan xargs
adalah standar multi-platform. Ini memberikan kontrol penuh untuk mesin regex mana yang akan digunakan, bagian mana dari nama proses yang cocok, menangani sensitivitas kasus dan manajemen pengecualian.
pkill -f -e -c myProcessName
Melakukan hal yang sama untuk saya, tetapi lihat man pkill
memiliki perilaku, bendera, dan mesin regex yang berbeda antara varian Linux, Mac, Zune-Bash, dan router sumber terbuka saya. Jadi ya, letakkan Unix-Railgun 35000 Watt Anda ke tangan pkill yang mumpuni untuk memangkas pagar tanaman. Lihat apa yang terjadi.
Gunakan pkill -f
, yang cocok dengan pola untuk bagian mana pun dari baris perintah
pkill -f my_pattern
Kalau-kalau tidak berhasil, coba gunakan yang ini juga:
pkill -9 -f my_pattern