GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara mematikan semua proses dengan nama parsial yang diberikan?

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:

  1. 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.

  2. 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 untuk kill -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

Linux
  1. Apa Proses Zombie Dan Bagaimana Menemukan &Membunuh Proses Zombie?

  2. Bagaimana Cara Membunuh Proses Dengan Frasa Dalam Namanya??

  3. Bagaimana saya bisa mematikan proses dengan nama, bukan PID?

  1. Bagaimana menemukan semua proses anak?

  2. Bagaimana cara membunuh proses anak setelah batas waktu tertentu di Bash?

  3. Bagaimana cara menggunakan Ctrl+C untuk mematikan semua proses latar belakang yang dimulai dalam skrip Bash?

  1. Cara mematikan proses zombie di Linux

  2. Bagaimana cara mematikan semua proses latar belakang di zsh?

  3. Bagaimana cara mematikan semua proses pengguna menggunakan UID mereka