Apakah Anda bertanya-tanya apakah memeriksa / proc / N adalah cara yang aman / dapat diandalkan untuk melihat apakah PID N sedang berjalan?
Andy Lester
Saya bertanya-tanya apakah secara teori mungkin ada residu di / proc setelah proses hilang.
David Dai
Jawaban:
25
Jika /prochanya procmount (dan tidak ada yang bermain trik dengan overlay), tidak, folder berbasis pid hanya ada selama proses yang sesuai ada di beberapa negara (termasuk sebagai zombie). Bahkan, tepat sebelum mengembalikan entri direktori untuk proses id, kernel kembali memvalidasi keberadaan proses - jadi pada saat entri direktori dikembalikan, proses yang sesuai masih ada. Mengakses direktori juga dimulai dengan mencari proses yang sesuai. (Jika nomor baris berubah, cari proc_pident_instantiatedan proc_pident_lookup.)
Anda dapat mengalami masalah yang disebabkan oleh daftar /procdan menggunakan hasil nanti (bahkan beberapa mikrodetik kemudian): proses dapat berjalan saat Anda daftar /proc, dan berhenti sebelum Anda bertindak atas hasilnya.
Bagaimana dengan proses yang menyelesaikan eksekusi tetapi wait()belum dipanggil?
el.pescado
2
Poin bagus @ el.pescado, pemeriksaan cepat menunjukkan bahwa proses zombie masih memiliki direktori mereka. Saya akan memperbarui jawaban saya, terima kasih!
Stephen Kitt
Pada dasarnya, jika psmenunjukkan proses, /procdirektori harus ada.
Barmar
@Barmar “must” sebenarnya: psmengakses /procuntuk menemukan informasi yang ditampilkannya.
Jawaban:
Jika
/proc
hanyaproc
mount (dan tidak ada yang bermain trik dengan overlay), tidak, folder berbasis pid hanya ada selama proses yang sesuai ada di beberapa negara (termasuk sebagai zombie). Bahkan, tepat sebelum mengembalikan entri direktori untuk proses id, kernel kembali memvalidasi keberadaan proses - jadi pada saat entri direktori dikembalikan, proses yang sesuai masih ada. Mengakses direktori juga dimulai dengan mencari proses yang sesuai. (Jika nomor baris berubah, cariproc_pident_instantiate
danproc_pident_lookup
.)Anda dapat mengalami masalah yang disebabkan oleh daftar
/proc
dan menggunakan hasil nanti (bahkan beberapa mikrodetik kemudian): proses dapat berjalan saat Anda daftar/proc
, dan berhenti sebelum Anda bertindak atas hasilnya.sumber
wait()
belum dipanggil?ps
menunjukkan proses,/proc
direktori harus ada.ps
mengakses/proc
untuk menemukan informasi yang ditampilkannya.