เรียนรู้คำสั่ง Linux - รอ

ชื่อ

รอ 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 หรือไม่