Banyak program seperti sshd membuat file .pid di / var / run / yang berisi ID prosesnya. Apakah file-file ini dapat diandalkan untuk menentukan apakah suatu proses sedang berjalan? Dugaan saya adalah bahwa file-file ini dibuat secara manual oleh suatu proses, dan karena itu akan tetap berada di sistem file jika program macet.
11
Jldupont benar dalam menyatakan bahwa file .pid tidak dapat diandalkan untuk menentukan apakah suatu proses sedang berjalan karena file tersebut mungkin tidak dihapus jika terjadi kerusakan.
Selain kondisi ras, saya sering menggunakan pgrep ketika saya perlu tahu apakah suatu proses sedang berjalan. Saya kemudian bisa referensi silang output terhadap file .pid jika saya merasa perlu.
sumber
File yang berisi id proses tidak dapat diandalkan menentukan apakah suatu proses sedang berjalan atau tidak. Ini hanya sumber yang dapat diandalkan, untuk mengetahui id proses yang diberikan terakhir untuk proses tersebut.
Ketika Anda memiliki id proses, Anda harus melakukan pemeriksaan lebih lanjut, jika prosesnya benar-benar berjalan.
Berikut ini sebuah contoh:
pgrep adalah perintah yang bagus, tetapi Anda akan mendapat masalah, saat Anda menjalankan banyak instance. Sebagai contoh ketika Anda memiliki sshd reguler yang berjalan pada port TCP / 22 dan Anda memiliki sshd lain yang berjalan pada port TCP / 2222, maka pgrep akan memberikan dua id proses ketika mencari sshd ... ketika sshd normal memiliki pid di / var /run/sshd.pid dan yang lain dapat memiliki pid di /var/run/sshd-other.pid Anda dapat dengan jelas membedakan prosesnya.
Saya tidak merekomendasikan hanya menggunakan ps , memipis melalui satu atau beberapa pipa dengan grep dan grep -v mencoba untuk menyaring semua hal lain yang tidak menarik bagi Anda ... ini seperti menggunakan
untuk mencari tahu, jika file keluar.
sumber
Tidak dapat diandalkan hanya memeriksa keberadaan suatu proses dengan pid yang sama seperti yang terkandung dalam file.
Tetapi banyak implementasi pidfile juga melakukan penguncian pada pidfile, sehingga jika prosesnya mati, kuncinya hilang. Asalkan mekanisme penguncian dapat diandalkan, memeriksa untuk melihat apakah file masih terkunci adalah mekanisme yang relatif dapat diandalkan untuk menentukan apakah proses asli masih berjalan.
sumber
Jldupont benar.
Anda dapat, bagaimanapun, mengirim proses sinyal 0 (kill -s 0 pid) untuk melihat apakah proses tersebut masih hidup (dengan asumsi Anda memiliki otoritas untuk mengirim sinyal seperti itu - secara umum, hanya pemilik proses yang dapat mengirim itu sinyal).
sumber
Saya setuju dengan jschmier.
Pada beberapa sistem, Anda tidak mendapatkan akses ke pgrep. Dalam kasus seperti itu, Anda dapat melakukannya
ps -aef | grep <pid>
untuk mengetahui apakah prosesnya benar-benar berjalan.sumber