สามารถ / proc / PID ยังคงอยู่เมื่อ PID ไม่ทำงานหรือไม่


11

เป็นไปได้ไหมที่โฟลเดอร์อย่างนั้น/proc/4587มีอยู่แม้ว่าจะไม่มีกระบวนการที่มี PID 4587


1
คุณสงสัยหรือไม่ว่าการตรวจสอบ / proc / N เป็นวิธีที่ปลอดภัย / เชื่อถือได้เพื่อดูว่า PID N ทำงานหรือไม่
Andy Lester

ฉันสงสัยว่าในทางทฤษฎีอาจมีสิ่งตกค้างใน / proc หลังจากกระบวนการหายไป
David Dai

คำตอบ:


25

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

คุณสามารถพบปัญหาที่เกิดจากการแสดงรายการ/procและใช้ผลลัพธ์ในภายหลัง (แม้กระทั่งสองสามไมโครวินาทีในภายหลัง): กระบวนการสามารถทำงานได้เมื่อคุณแสดงรายการ/procและหยุดก่อนที่คุณจะดำเนินการกับผลลัพธ์


3
แล้วกระบวนการที่ดำเนินการเสร็จสิ้นแล้ว แต่wait()ยังไม่ถูกเรียกใช้
el.pescado

2
Good point @ el.pescado การตรวจสอบด่วนบ่งชี้ว่ากระบวนการซอมบี้ยังคงมีไดเรกทอรีอยู่ ฉันจะอัปเดตคำตอบของฉันขอบคุณ!
Stephen Kitt

โดยทั่วไปถ้าpsแสดงให้เห็นว่ากระบวนการ/procไดเรกทอรีของมันควรมีอยู่
Barmar

@Barmar "ต้อง" ที่จริงแล้ว: psเข้าถึง/procเพื่อค้นหาข้อมูลที่แสดง
Stephen Kitt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.