รอ (เรียกระบบ)

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

ในระบบปฏิบัติการคอมพิวเตอร์ กระบวนการ (หรืองาน ) อาจรอกระบวนการอื่นเพื่อดำเนินการให้เสร็จสิ้น ในระบบส่วนใหญ่กระบวนการหลักสามารถสร้างกระบวนการย่อย ที่ดำเนินการอย่างอิสระ กระบวนการหลักอาจออกการเรียกระบบรอซึ่งระงับการดำเนินการของกระบวนการหลักในขณะที่เด็กดำเนินการ เมื่อกระบวนการลูกยุติลง จะส่งกลับสถานะการออกไปยังระบบปฏิบัติการ ซึ่งจะถูกส่งกลับไปยังกระบวนการหลักที่รอ กระบวนการหลักจะดำเนินการต่อ

ระบบปฏิบัติการสมัยใหม่ยังมีการเรียกระบบที่อนุญาตให้เธรด ของกระบวนการ สร้างเธรดอื่นและรอให้สิ้นสุด (" เข้าร่วม " เหล่านั้น) ในลักษณะเดียวกัน

ระบบปฏิบัติการอาจมีรูปแบบต่าง ๆ ของการรอเรียกที่อนุญาตให้กระบวนการรอกระบวนการย่อยใดๆ เพื่อออกหรือรอให้กระบวนการย่อยเฉพาะตัวเดียว (ระบุโดยID กระบวนการ ) เพื่อออก

ระบบปฏิบัติการบางระบบส่งสัญญาณ ( SIGCHLD ) ไปยังกระบวนการหลักเมื่อกระบวนการลูกยุติลง โดยจะแจ้งกระบวนการหลักและอนุญาตให้เรียกสถานะการออกของกระบวนการลูก

สถานะการ ออกที่ ส่งคืนโดยกระบวนการลูกมักจะระบุว่ากระบวนการสิ้นสุดตามปกติหรือผิดปกติ สำหรับการยุติตามปกติ สถานะนี้ยังรวมถึงรหัสทางออก (โดยปกติคือค่าจำนวนเต็ม) ที่กระบวนการส่งคืนให้กับระบบ ในช่วง 20 ปีแรกของ UNIX มีเพียง 8 บิตของรหัสออกที่ต่ำเท่านั้นที่พร้อมใช้งานสำหรับผู้ปกครองที่รออยู่ ในปี 1989 กับSVR4ได้ มี การ แนะนำ call waitid ใหม่ที่ส่งกลับบิตทั้งหมดจากการ เรียก exitในโครงสร้างที่เรียกว่าsiginfo_tในสมาชิกโครงสร้างsi_status [ ต้องการการอ้างอิง ]Waitid เป็นส่วนบังคับของมาตรฐาน POSIX ตั้งแต่ปี 2544

ซอมบี้และเด็กกำพร้า

เมื่อกระบวนการลูกยุติลง มันจะกลายเป็นกระบวนการซอมบี้และยังคงมีอยู่เป็นรายการในตารางกระบวนการ ของระบบ แม้ว่าจะไม่ใช่โปรแกรมที่กำลังดำเนินการอยู่อีกต่อไป ภายใต้การดำเนินการปกติ โดยทั่วไปจะรอโดยผู้ปกครองทันที จากนั้นจึงเก็บเกี่ยวโดยระบบ เพื่อเรียกคืนทรัพยากร (รายการตารางกระบวนการ) หากพาเรนต์ไม่คอยลูก ลูกจะใช้ทรัพยากรนี้ต่อไปอย่างไม่มีกำหนด และทำให้ทรัพยากรรั่วไหล สถานการณ์ดังกล่าวมักถูกจัดการด้วยกระบวนการ "ผู้เก็บเกี่ยว" แบบพิเศษซึ่งระบุตำแหน่งของซอมบี้และเรียกสถานะการออกของพวกมัน ทำให้ระบบปฏิบัติการสามารถจัดสรรทรัพยากรของพวกมันได้

ตรงกันข้าม กระบวนการลูกที่กระบวนการหลักสิ้นสุดก่อนที่จะกลายเป็น กระบวนการ เด็กกำพร้า โดยทั่วไปสถานการณ์ดังกล่าวจะได้รับการจัดการด้วยกระบวนการ "รูท" (หรือ "init") พิเศษ ซึ่งถูกกำหนดให้เป็นพาเรนต์ใหม่ของโปรเซสเมื่อโปรเซสพาเรนต์ออกจากกระบวนการ กระบวนการพิเศษนี้ตรวจพบเมื่อกระบวนการเด็กกำพร้ายุติลง จากนั้นดึงสถานะการออก อนุญาตให้ระบบจัดสรรคืนโปรเซสลูกที่ถูกยุติ

หากโปรเซสลูกได้รับสัญญาณ ผู้ปกครองที่รอจะดำเนินการต่อไปโดยทิ้งกระบวนการเด็กกำพร้าไว้เบื้องหลัง [ ต้องการการอ้างอิง ]ดังนั้นบางครั้งจำเป็นต้องตรวจสอบอาร์กิวเมนต์ที่กำหนดโดย wait, waitpid หรือ waitid และในกรณีที่ WIFSIGNALED เป็นจริง ให้รอกระบวนการย่อยอีกครั้งเพื่อจัดสรรทรัพยากรใหม่ [ ต้องการการอ้างอิง ]

ดูเพิ่มเติม

อ้างอิง