ชื่อ
รอ waitpid - รอการสิ้นสุดของ กระบวนการ
สรุป
#include
# include
รอ pid_t (int * สถานะ );
pid_t waitpid (pid_t pid , int * สถานะ int ตัวเลือก );
ลักษณะ
ฟังก์ชั่น รอคอย ระงับการดำเนินการของกระบวนการปัจจุบันจนกว่าเด็กจะได้ออกไปหรือจนกว่าจะมีการส่งสัญญาณซึ่งมีการดำเนินการเพื่อยุติกระบวนการปัจจุบันหรือเรียกฟังก์ชันจัดการสัญญาณ ถ้าเด็กได้ออกไปแล้วตามเวลาของการโทร (เรียกว่ากระบวนการ "ผีดิบ") ฟังก์ชันจะส่งกลับทันที ทรัพยากรระบบใด ๆ ที่เด็กใช้จะได้รับการปลดปล่อย
ฟังก์ชัน waitpid ระงับการทำงานของกระบวนการปัจจุบันจนกว่าเด็กที่ระบุโดยอาร์กิวเมนต์ pid ได้ออกหรือจนกว่าจะมีการส่งสัญญาณที่มีการดำเนินการเพื่อยุติกระบวนการปัจจุบันหรือเรียกฟังก์ชันจัดการสัญญาณ ถ้าเด็กที่ได้รับการร้องขอจาก pid ได้ออกไปแล้วตามเวลาของการโทร (กระบวนการที่เรียกว่า "zombie") ฟังก์ชันจะส่งคืนทันที ทรัพยากรระบบใด ๆ ที่เด็กใช้จะได้รับการปลดปล่อย
ค่าของ pid อาจเป็นหนึ่งใน:
<-1
ซึ่งหมายถึงการรอกระบวนการเด็กที่มี ID กลุ่มกระบวนการเท่ากับค่าสัมบูรณ์ของ pid
-1
ซึ่งหมายถึงการรอคอยกระบวนการลูก ๆ นี่เป็นพฤติกรรมเดียวกับที่ รอการ จัดแสดง
0
ซึ่งหมายถึงการรอกระบวนการเด็กที่มี ID กลุ่มกระบวนการเท่ากับกระบวนการโทร
> 0
ซึ่งหมายถึงการรอให้เด็กที่ ID กระบวนการมีค่าเท่ากับค่าของ pid
ค่าของ ตัวเลือก คือค่าคงที่หรือมากกว่าหรือเท่ากับค่าคงที่ต่อไปนี้:
WNOHANG
ซึ่งหมายความว่าจะกลับทันทีหากไม่มีเด็กออก
WUNTRACED
ซึ่งหมายถึงการกลับมาให้ลูกที่หยุดทำงานและยังไม่มีรายงานสถานะ
(สำหรับตัวเลือกลีนุกซ์เท่านั้นโปรดดูด้านล่าง)
หาก สถานะ ไม่ใช่ NULL ให้ รอ หรือ รอ ข้อมูลสถานะการจัดเก็บ รอ ในตำแหน่งที่ชี้ไปตาม สถานะ
(แมโครเหล่านี้ใช้บัฟเฟอร์ stat ( int ) เป็นอาร์กิวเมนต์ไม่ใช่ตัวชี้ไปยังบัฟเฟอร์!):
WIFEXITED ( สถานะ )
ไม่ใช่ศูนย์หากเด็กออกจากปกติ
WEXITSTATUS ( สถานะ )
ประเมินอย่างน้อยอย่างมีนัยสำคัญแปดบิตของรหัสที่ส่งกลับของเด็กที่ถูกยกเลิกซึ่งอาจได้รับการตั้งค่าเป็นอาร์กิวเมนต์การโทรเพื่อ ออก () หรือเป็นอาร์กิวเมนต์สำหรับคำสั่ง return ในโปรแกรมหลัก แมโครนี้สามารถประเมินได้ถ้า WIFEXITED ส่งกลับไม่ใช่ศูนย์
WIFSIGNALED ( สถานะ )
ส่งกลับค่าจริงถ้ากระบวนการเด็กออกเนื่องจากมีสัญญาณซึ่งไม่ได้ถูกจับ
WMSMS ( สถานะ )
ส่งกลับจำนวนของสัญญาณที่ทำให้กระบวนการย่อยถูกยกเลิก แมโครนี้สามารถประเมินได้ถ้า WIFSIGNALED ส่งกลับไม่ใช่ศูนย์
WIFSTOPPED ( สถานะ )
ส่งกลับค่าจริงถ้ากระบวนการลูกซึ่งก่อให้เกิดผลตอบแทนถูกระงับไว้ในขณะนี้ นี้เป็นไปได้เฉพาะเมื่อมีการเรียกใช้ WUNTRACED
WSTOPSIG ( สถานะ )
ส่งกลับจำนวนของสัญญาณที่ทำให้เด็กหยุด แมโครนี้สามารถประเมินได้ถ้า WIFSTOPPED ส่งกลับไม่ใช่ศูนย์
บางรุ่นของ Unix (เช่น Linux, Solaris แต่ไม่ใช่ AIX, SunOS) ยังกำหนดมาโคร WCOREDUMP ( สถานะ ) เพื่อทดสอบว่ากระบวนการลูกทิ้งแกนหรือไม่ ใช้เฉพาะไฟล์นี้ใน #ifdef WCOREDUMP ... #endif
มูลค่าย้อนกลับ
รหัสกระบวนการของเด็กที่ออกหรือศูนย์ถ้าใช้ WNOHANG และไม่มีเด็กที่มีอยู่หรือ -1 เมื่อเกิดข้อผิดพลาด (ซึ่ง errno ตั้งค่าเป็นค่าที่เหมาะสม)
ข้อผิดพลาด
ECHILD
ถ้ากระบวนการที่ระบุไว้ใน pid ไม่มีอยู่หรือไม่เป็นเด็กของกระบวนการเรียก (กรณีนี้สามารถเกิดขึ้นได้กับลูกของตัวเองถ้าการกระทำของ SIGCHLD ได้รับการตั้งค่าเป็น SIG_IGN โปรดดูหัวข้อ LINUX NOTES เกี่ยวกับหัวข้อ)
EINVAL
ถ้าอาร์กิวเมนต์ ตัวเลือก ไม่ถูกต้อง
EINTR
ถ้าไม่ได้ตั้งค่า WNOHANG และมีการยกเลิกการปิดกั้นสัญญาณ SIGCHLD หรือไม่