เป็นไปได้ไหมที่โฟลเดอร์อย่างนั้น/proc/4587
มีอยู่แม้ว่าจะไม่มีกระบวนการที่มี PID 4587
เป็นไปได้ไหมที่โฟลเดอร์อย่างนั้น/proc/4587
มีอยู่แม้ว่าจะไม่มีกระบวนการที่มี PID 4587
คำตอบ:
หาก/proc
เป็นเพียงการproc
เมานต์ (และไม่มีใครเล่นเล่ห์เหลี่ยมที่มีการซ้อนทับ) ไม่โฟลเดอร์ที่ใช้ pid จะมีอยู่ตราบใดที่กระบวนการที่เกี่ยวข้องนั้นมีอยู่ในบางสถานะ (รวมถึงซอมบี้) ในความเป็นจริงก่อนที่จะส่งคืนรายการไดเร็กทอรีสำหรับ id กระบวนการเคอร์เนลตรวจสอบความถูกต้องของกระบวนการอีกครั้ง - ดังนั้นเมื่อมีการส่งคืนรายการไดเรกทอรีทันทีกระบวนการที่สอดคล้องกันยังคงอยู่ที่นั่น การเข้าถึงไดเรกทอรียังเริ่มต้นด้วยการค้นหากระบวนการที่เกี่ยวข้อง (หากหมายเลขบรรทัดเปลี่ยนให้ค้นหาproc_pident_instantiate
และproc_pident_lookup
)
คุณสามารถพบปัญหาที่เกิดจากการแสดงรายการ/proc
และใช้ผลลัพธ์ในภายหลัง (แม้กระทั่งสองสามไมโครวินาทีในภายหลัง): กระบวนการสามารถทำงานได้เมื่อคุณแสดงรายการ/proc
และหยุดก่อนที่คุณจะดำเนินการกับผลลัพธ์
wait()
ยังไม่ถูกเรียกใช้
ps
แสดงให้เห็นว่ากระบวนการ/proc
ไดเรกทอรีของมันควรมีอยู่
ps
เข้าถึง/proc
เพื่อค้นหาข้อมูลที่แสดง