Apa perbedaan antara kill, pkill dan killall

31

Saya akrab dengan killperintah, dan sebagian besar waktu kita hanya menggunakan kill -9 untuk mematikan suatu proses secara paksa, ada banyak sinyal lain yang dapat digunakan kill. Tapi saya ingin tahu apa kasus penggunaan pkilldan killall, jika sudah ada perintah kill.

Apakah pkilldan killallmenggunakan killperintah dalam implementasi mereka? Maksud saya mereka hanya pembungkus killatau mereka memiliki implementasi sendiri?

Saya juga ingin tahu bagaimana pgrepperintah mendapatkan id proses dari nama proses.

Apakah semua perintah ini menggunakan panggilan sistem mendasar yang sama? Apakah ada perbedaan dari sudut pandang kinerja, mana yang lebih cepat?

Ijaz Ahmad Khan
sumber
2
Dua hal: Mengapa digunakan kill -9secara default? -15 (tolong hentikan) dan -1 (modem sudah ditutup, tolong JELAS tutup sendiri) jauh lebih sopan. Kedua. Waspadalah terhadap penggunaan killall pada kotak non-linux. Itu mungkin berperilaku berbeda. (Misalnya pada solaris itu membunuh semua. TIDAK difilter pada nama proses).
Hennes

Jawaban:

31

The killperintah pembungkus yang sangat sederhana dengan kill system call , yang tahu hanya tentang proses ID (PID). pkilldan killalljuga pembungkus untuk kill pemanggilan sistem , (sebenarnya, ke perpustakaan libc yang secara langsung memanggil pemanggilan sistem), tetapi dapat menentukan PID untuk Anda, berdasarkan pada hal-hal seperti, nama proses, pemilik proses, id sesi, dll.

Bagaimana pkilldan killallkerja dapat dilihat menggunakan ltraceatau stracepada mereka. Di Linux, keduanya membaca /procsistem file, dan untuk setiap pid (direktori) yang ditemukan, melintasi lintasan dengan cara mengidentifikasi proses dengan namanya atau atribut lainnya. Cara ini dilakukan secara teknis, kernel dan sistem spesifik. Secara umum, mereka membaca /proc/<PID>/statyang berisi nama perintah sebagai bidang ke-2. Untuk pkill -fdan pgrepmemeriksa /cmdlineentri untuk setiap entri PID.

pkilldan pgrepgunakan readprocsystem call, sedangkan killalltidak. Saya tidak bisa mengatakan jika ada perbedaan kinerja: Anda harus membandingkannya sendiri.

Otheus
sumber
2

kill and killall adalah alat yang menyediakan cara untuk membunuh suatu proses. Yang pertama dengan PID-nya, yang kedua dengan namanya. pgrep (daftar) dan pkill (kill secara default) adalah alat yang menyediakan cara untuk mengirim pesan ke suatu proses dengan namanya atau atribut lain, lihat: http://linux.die.net/man/1/pkill Untuk info lebih lanjut tentang sinyal: http://linux.die.net/man/7/signal

darwis
sumber
Apakah maksud Anda killalldigunakan untuk membunuh proses dengan namanya? dan menggunakan pgrep untuk tujuan ini? dan killalljuga membunuh semua proses anak ,? sinyal apa yang killalldigunakan secara default?
Ijaz Ahmad Khan
3
... kecuali Anda menggunakan Solaris, dalam hal ini killallakan membunuh semua proses yang Anda miliki hak untuk membunuh, sehingga jika Anda melakukan root, Anda secara efektif me-reboot server.
Jenny D
1
ya: killall chromiumakan membunuh proses kromium, pgrep chromiumakan memberi Anda daftar PID, pkill chromiumakan membunuh kromium. killall akan mengirim secara default sinyal SIGTERM (seperti pkill)
dervishe