Bisakah / proc / PID masih ada saat PID tidak berjalan?

11

apakah mungkin folder seperti /proc/4587ada walaupun tidak ada proses yang memiliki PID 4587?

David Dai
sumber
1
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.

Stephen Kitt
sumber
3
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.
Stephen Kitt