Cara membunuh banyak proses

21

untuk menemukan PID proses untuk mematikan gunakan:

pgrep <process command>

Saya kemudian menggunakan perintah kill untuk membunuh PID yang dikembalikan oleh pgrep <process command>

kill <PID>

Bisakah perintah ini digabungkan menjadi satu sehingga dapat membunuh PID atau PID yang dikembalikan oleh pgrep <process command>? Atau adakah metode membunuh banyak proses dengan nama perintah?

Sesuatu seperti : kill(pgrep <name of process>)

langit biru
sumber
3
Apakah kamu sudah mencoba pkill? Atau, Anda mungkin ingin menggunakan xargs.
MatthewRock
1
Perhatikan bahwa halaman manual juga bagus untuk hal-hal seperti ini. Seringkali mereka tidak hanya memberi tahu Anda bagaimana menggunakan perintah, mereka juga memberi tahu Anda tentang perintah terkait. Dalam hal ini, pgrephalaman manual menyebutkan pkillsemua tempat (karena 2 perintah berasal dari paket yang sama).
Patrick

Jawaban:

27

Anda dapat menggunakan pkill:

pkill httpd

Anda mungkin juga ingin menggunakan substitusi proses (meskipun ini tidak sejelas):

kill $(pgrep command)

Dan Anda mungkin ingin menggunakan xargs:

pgrep command | xargs kill
MatthewRock
sumber
4
Saya melakukan hal yang sama dalam jawaban dan ditunjukkan kepada saya bahwa saya memperkenalkan kondisi balapan. ID proses mungkin tidak valid di antara panggilan ke pgrepdan kill. Gunakan saja pkill.
Kusalananda
3
@ Kusalananda hal yang sama juga dapat terjadi antara pkillmendapatkan daftar proses dan benar-benar mengirim sinyal, hanya saja lebih sulit untuk melihat dalam kasus itu.
hobbs
1
Saya akan mencoba menyusun jawaban yang melingkar seperti kill $(ps|head -1)ingin menghindari kondisi balapan ... tapi sebenarnya tidak ada cara untuk menghindarinya. Prosesnya bisa mati di sembarang titik dalam pipa.
Ross Presser
Berhati-hatilah dengan pkill karena beberapa program mungkin memiliki lebih dari satu instance yang berjalan dan Anda mungkin tidak ingin mematikan semuanya. Menjalankan pgrep terlebih dahulu akan membantu selama yang lain tidak dimulai antara saat Anda menjalankan pgrep dan pkill (balapan).
Joe
1
Bahkan program C tidak dapat menghindari kondisi balapan, jendela hanya akan lebih kecil. Satu-satunya cara untuk melakukannya benar-benar secara atom adalah dengan menambahkan panggilan sistem yang membunuh proses dengan nama. Tetapi ID proses umumnya tidak akan digunakan kembali dengan sangat cepat, jadi bahayanya hampir tidak ada.
Barmar
17

Anda dapat menggunakan killalljuga, mis

killall firefox

untuk mengirim SIGTERMke semua firefoxproses.

Komandan Byte
sumber
8
Catatan yang killallmemiliki arti berbeda pada sistem unix berbeda - jika Anda menggunakan sistem non-Linux pastikan untuk memeriksa dokumentasinya.
Random832
killall -KILL firefoxbisa merasakan sooo bermanfaat.
pipa
Non-portabilitas killalladalah mengapa saya tidak pernah menggunakannya. Menjalankan killallpada kotak solaris misalnya adalah bencana.
Patrick
9

Ya, Anda dapat menggunakan fitur bash dan mengulangi output.

$ for proc in $(pgrep <process command>); do kill $proc; done
lcipriani
sumber
Saya mendapatkankill <no>:failed: operation not permitted
Timo
Mungkin Anda tidak memiliki izin yang tepat atau proses tidak ada lagi, silakan merujuk ke: superuser.com/questions/1175485/…
lcipriani
0

Anda dapat membunuh banyak proses dengan array. Dalam hal ini Anda dapat menentukan opsi sebagai $ip, $hostnameatau sesuatu yang serupa.

ip=your_ip_address; declare -a arr=$(ps aux|grep tail|grep $ip|awk '{print $2}'); for pid in ${arr[@]}; do kill -9 $pid; done;
Vladyslav Greyswandir
sumber