Saya akrab dengan kill
command , dan sebagian besar waktu kita hanya menggunakan kill -9
untuk mematikan proses secara paksa, ada banyak sinyal lain yang dapat digunakan dengan kill
. Tapi saya ingin tahu apa kasus penggunaan pkill
dan killall
, jika sudah ada perintah kill.
Lakukan pkill
dan killall
gunakan kill
perintah dalam pelaksanaannya? Maksud saya mereka hanyalah pembungkus kill
atau mereka memiliki implementasinya sendiri?
Saya juga ingin tahu bagaimana pgrep
perintah mendapatkan id proses dari nama proses.
Apakah semua perintah ini menggunakan panggilan sistem dasar yang sama? Apakah ada perbedaan dari sudut pandang kinerja, mana yang lebih cepat?
Jawaban yang Diterima:
kill
perintah adalah pembungkus yang sangat sederhana untuk kill
panggilan sistem , yang hanya mengetahui tentang ID proses (PID). pkill
dan killall
juga merupakan pembungkus kill
panggilan sistem , (sebenarnya, ke perpustakaan libc yang secara langsung memanggil panggilan sistem), tetapi dapat menentukan PID untuk Anda, berdasarkan hal-hal seperti, nama proses, pemilik proses, id sesi, dll.
Bagaimana pkill
dan killall
pekerjaan dapat dilihat menggunakan ltrace
atau strace
pada mereka. Di Linux, keduanya membaca /proc
sistem file, dan untuk setiap pid (direktori) yang ditemukan, melintasi jalur dengan cara mengidentifikasi proses dengan nama atau atribut lainnya. Bagaimana ini dilakukan secara teknis, kernel dan sistem tertentu. Secara umum, mereka membaca dari /proc/<PID>/stat
yang berisi nama perintah sebagai bidang ke-2. Untuk pkill -f
dan pgrep
periksa /cmdline
entri untuk setiap entri proc PID.
pkill
dan pgrep
gunakan readproc
panggilan sistem, sedangkan killall
tidak. Saya tidak bisa mengatakan apakah ada perbedaan performa:Anda harus membandingkannya sendiri.