เป็นไปได้ไหมที่โฟลเดอร์อย่างนั้น/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เพื่อค้นหาข้อมูลที่แสดง