Skip to main content

Wait - Linux Command - คำสั่ง Unix

Unix Command id (มิถุนายน 2026)

Unix Command id (มิถุนายน 2026)
Anonim

ชื่อ

รอ 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

ซึ่งหมายถึงการกลับมาให้ลูกที่หยุดทำงานและยังไม่มีรายงานสถานะ

(สำหรับตัวเลือกลีนุกซ์เท่านั้นโปรดดูด้านล่าง)

ถ้า สถานะ ไม่ใช่โมฆะ, รอ หรือwaitpid เก็บข้อมูลสถานะในตำแหน่งที่ชี้ไปที่ สถานะ .

สถานะนี้สามารถได้รับการประเมินด้วยมาโครต่อไปนี้ (มาโครเหล่านี้ใช้บัฟเฟอร์สถิติ (aint) เป็นอาร์กิวเมนต์ --- ไม่ใช่ตัวชี้ไปยังบัฟเฟอร์!):

WIFEXITED ( สถานะ )

ไม่ใช่ศูนย์หากเด็กออกจากปกติ

WEXITSTATUS ( สถานะ )

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

WIFSIGNALED ( สถานะ )

ส่งกลับค่าจริงถ้ากระบวนการเด็กออกเนื่องจากมีสัญญาณซึ่งไม่ได้ถูกจับ

WTERMSIG ( สถานะ )

ส่งกลับจำนวนของสัญญาณที่ทำให้กระบวนการย่อยถูกยกเลิก แมโครนี้สามารถประเมินได้ถ้า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 ถูกจับ.