Beberapa tahun yang lalu, seorang rekan kerja datang dengan solusi yang elegan untuk program pengawas. Program ini berjalan pada Windows dan menggunakan objek Windows Event untuk memantau proses handle (PID) dari beberapa aplikasi. Jika salah satu proses dihentikan secara tak terduga, pegangan prosesnya tidak lagi ada dan pengawasnya akan segera diberi sinyal. Watchdog kemudian akan mengambil tindakan yang tepat untuk "menyembuhkan" sistem.
Pertanyaan saya adalah, bagaimana Anda mengimplementasikan anjing penjaga seperti itu di Linux? Apakah ada cara untuk satu program untuk memantau PID banyak orang lain?
linux
process
monitoring
Justin Ethier
sumber
sumber
Jawaban:
Cara tradisional, portabel, dan umum digunakan adalah proses induk mengawasi anak-anaknya.
Primitif dasar adalah panggilan sistem
wait
danwaitpid
. Ketika proses anak meninggal, proses induk menerimaSIGCHLD
sinyal, mengatakan itu harus memanggilwait
untuk mengetahui anak yang mati dan status keluarnya. Sebaliknya proses induk dapat memilih untuk mengabaikanSIGCHLD
dan memanggilwaitpid(-1, &status, WNOHANG)
dengan nyaman.Untuk memantau banyak proses, Anda akan memunculkan semuanya dari induk yang sama, atau memohon semuanya melalui proses pemantauan sederhana yang hanya memanggil program yang diinginkan, menunggu untuk mengakhiri dan melaporkan penghentian (dalam sintaksis shell:)
myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe
. Jika Anda berasal dari dunia Windows, perhatikan bahwa memiliki program kecil yang melakukan satu tugas khusus adalah desain umum di dunia Unix, OS dirancang untuk membuat proses menjadi murah.Ada banyak program pemantauan proses (juga disebut pengawas) yang dapat melaporkan ketika suatu proses mati dan secara opsional memulai kembali dan lebih jauh lagi selain itu: Monit , Mengawasi , Pemula , ...
sumber
Pendekatan saya untuk masalah ini adalah menggunakan init dan perintah respawn bawaan untuk memulai / memulai ulang apa pun yang Anda perlu jalankan. Inilah maksud dan tujuan awalnya. Dalam beberapa kasus, Anda perlu menjalankan skrip untuk dibersihkan setelah proses mati, atau untuk mempersiapkan proses untuk memulai (sebagian besar waktu pekerjaannya sama). Dalam kebanyakan kasus, skrip bash yang berakhir dengan exec berfungsi baik untuk ini.
sumber