ຮຽນຮູ້ຄໍາສັ່ງ Linux - ລໍຖ້າ

ຊື່

ລໍ waitpid - ລໍຖ້າສໍາລັບ ການ ສິ້ນສຸດ ຂະບວນ ການ

Synopsis

#include
#include

pid_t wait (int * status );
pid_t waitpid (pid_t pid , int * status , int options )

ລາຍລະອຽດ

ຟັງຊັນ ລໍຖ້າ ຢຸດການປະຕິບັດຂອງຂະບວນການປະຈຸບັນຈົນກ່ວາເດັກໄດ້ອອກຈາກ, ຫຼືຈົນກ່ວາສົ່ງສັນຍານທີ່ມີການປະຕິບັດງານທີ່ຈະຢຸດຕິຂະບວນການປະຈຸບັນຫຼືໂທຫາຫນ້າທີ່ຈັດການສັນຍານ. ຖ້າເດັກໄດ້ອອກຈາກເວລາຂອງການເອີ້ນ (ຂະບວນການທີ່ເອີ້ນວ່າ "ຜີດິບ") ແລ້ວ, ຫນ້າທີ່ຈະກັບຄືນມາໃນທັນທີ. ຊັບພະຍາກອນລະບົບໃດໆທີ່ໃຊ້ໂດຍເດັກຈະຖືກປ່ອຍອອກ.

ຟັງຊັນ waitpid ຍົກເລີກການປະຕິບັດຂອງຂະບວນການປະຈຸບັນຈົນກ່ວາເດັກທີ່ຖືກກໍານົດໂດຍການໂຕ້ຖຽງ pid ອອກ, ຫຼືຈົນກ່ວາສັນຍານທີ່ຖືກສົ່ງໃຫ້ມີການປະຕິບັດທີ່ມີການປະຕິບັດງານໃນປັດຈຸບັນຫຼືເອີ້ນຟັງຊັນການຈັດການສັນຍານ. ຖ້າເດັກທີ່ຖືກຮ້ອງຂໍໂດຍ pid ໄດ້ຖືກຍົກຍ້າຍອອກໄປແລ້ວໂດຍເວລາຂອງການໂທ (ຂະບວນການທີ່ເອີ້ນວ່າ "ຜີດິບ"), ຟັງຊັນຄືນມາ. ຊັບພະຍາກອນລະບົບໃດໆທີ່ໃຊ້ໂດຍເດັກຈະຖືກປ່ອຍອອກ.

ມູນຄ່າຂອງ pid ສາມາດເປັນຫນຶ່ງໃນ:

<-1

ຊຶ່ງຫມາຍເຖິງການລໍຖ້າສໍາລັບຂະບວນການຂອງເດັກທີ່ມີ ID ກຸ່ມຂະບວນການເທົ່າກັບມູນຄ່າທີ່ແທ້ຈິງຂອງ pid .

-1

ຊຶ່ງຫມາຍຄວາມວ່າຈະລໍຖ້າສໍາລັບຂະບວນການຂອງເດັກໃດ; ນີ້ແມ່ນພຶດຕິກໍາດຽວກັນທີ່ ລໍຖ້າ ງານວາງສະແດງ.

0

ຊຶ່ງຫມາຍຄວາມວ່າຈະລໍຖ້າສໍາລັບຂະບວນການຂອງເດັກທີ່ມີ ID ກຸ່ມຂອງຂະບວນການເທົ່າກັບຂະບວນການໂທ.

> 0

ຊຶ່ງຫມາຍຄວາມວ່າຈະລໍຖ້າເດັກທີ່ມີ ID ຂອງຂະບວນການເທົ່າກັບມູນຄ່າຂອງ pid .

ຄ່າຂອງ ຕົວເລືອກ ແມ່ນເປັນ OR ຫະລື 0 ຂອງຈໍານວນຕໍ່ໄປນີ້:

WNOHANG

ຊຶ່ງຫມາຍຄວາມວ່າຈະກັບຄືນທັນທີຖ້າບໍ່ມີເດັກອອກມາ.

WUNTRACED

ຊຶ່ງຫມາຍຄວາມວ່າຍັງຈະກັບຄືນສໍາລັບເດັກທີ່ຖືກຢຸດເຊົາແລະບໍ່ມີລາຍງານສະຖານະພາບ.

(ສໍາລັບຕົວເລືອກ Linux ເທົ່ານັ້ນ, ເບິ່ງຂ້າງລຸ່ມນີ້)

ຖ້າ ສະຖານະ ບໍ່ແມ່ນ NULL , ລໍຖ້າ ຫຼື waitpid store ຂໍ້ມູນສະຖານະໃນສະຖານທີ່ຊີ້ໃຫ້ເຫັນໂດຍ ສະຖານະພາບ .

ສະຖານະພາບນີ້ສາມາດໄດ້ຮັບການປະເມີນດ້ວຍ macros ດັ່ງຕໍ່ໄປນີ້ (macros ເຫຼົ່ານີ້ໃຊ້ buffer ສະຖິຕິ ( int ) ເປັນການໂຕ້ຖຽງ --- ບໍ່ແມ່ນຕົວຊີ້ໄປທີ່ buffer!):

WIFEXITED ( ສະຖານະພາບ )

ແມ່ນບໍ່ສູນຖ້າເດັກອອກມາຕາມປົກກະຕິ.

WEXITSTATUS ( ສະຖານະພາບ )

ພິຈາລະນາເຖິງແປດບິດທີ່ສໍາຄັນຂອງລະຫັດການກັບຄືນຂອງເດັກທີ່ຖືກຍົກເລີກ, ຊຶ່ງອາດຈະຖືກກໍານົດເປັນການໂຕ້ຖຽງກັບການໂທ ອອກ () ຫຼືເປັນການໂຕ້ຖຽງສໍາລັບຄໍາຖະແຫຼງທີ່ ສົ່ງຄືນ ໃນໂຄງການຕົ້ນຕໍ. ແມໂຄນີ້ສາມາດຖືກປະເມີນຖ້າ WIFEXITED ກັບຄືນໄປບ່ອນບໍ່ສູນ.

WIFSIGNALED ( ສະຖານະພາບ )

ກັບຄືນມາເປັນຄວາມຈິງຖ້າຂະບວນການຂອງເດັກອອກຈາກສັນຍານທີ່ບໍ່ໄດ້ຖືກຈັບ.

WTERMSIG ( ສະຖານະພາບ )

ຜົນຕອບແທນຂອງຈໍານວນສັນຍານທີ່ເຮັດໃຫ້ຂະບວນການຂອງເດັກຈົບລົງ. ແມໂຄນີ້ສາມາດໄດ້ຮັບການປະເມີນຖ້າ WIFSIGNALED ກັບຄືນໄປບ່ອນບໍ່ແມ່ນສູນ.

WIFSTOPPED ( ສະຖານະພາບ )

ໃຫ້ຜົນໄດ້ຮັບທີ່ແທ້ຈິງຖ້າຂະບວນການຂອງເດັກທີ່ເຮັດໃຫ້ຜົນໄດ້ຮັບຖືກຢຸດຢູ່; ນີ້ແມ່ນພຽງແຕ່ເປັນໄປໄດ້ຖ້າຫາກວ່າການໂທຖືກເຮັດໂດຍໃຊ້ WUNTRACED .

WSTOPSIG ( ສະຖານະພາບ )

ສົ່ງຜົນກະທົບຂອງສັນຍານທີ່ເຮັດໃຫ້ເດັກຢຸດເຊົາ. ແມໂຄນີ້ພຽງແຕ່ສາມາດຖືກປະເມີນຖ້າ WIFSTOPPED ກັບບໍ່ສູນ.

ບາງສະບັບຂອງ Unix (ເຊັ່ນ: Linux, Solaris, ແຕ່ບໍ່ AIX, SunOS) ຍັງກໍານົດສະມະການ WCOREDUMP ( ສະຖານະພາບ ) ເພື່ອກວດສອບວ່າຂະບວນການຂອງລູກທີ່ຖືກຖິ້ມຫຼັກ. ໃຊ້ເສພາະນີ້ທີ່ຢູ່ໃນ #ifdef WCOREDUMP ... #endif.

Return Value

ຫມາຍເລກຂະບວນການຂອງເດັກທີ່ອອກຫລືບໍ່ຖ້າ WNOHANG ຖືກນໍາໃຊ້ແລະບໍ່ມີເດັກຢູ່, ຫຼື -1 ໃນຂໍ້ຜິດພາດ (ໃນກໍລະນີທີ່ errno ຖືກຕັ້ງຄ່າທີ່ເຫມາະສົມ).

ຂໍ້ຜິດພາດ

ECHILD

ຖ້າຂະບວນການທີ່ກໍານົດໄວ້ໃນ pid ບໍ່ມີຢູ່ຫຼືບໍ່ແມ່ນລູກຂອງຂະບວນການໂທຫາ. (ນີ້ສາມາດເກີດຂຶ້ນສໍາລັບລູກຂອງຕົນເອງຖ້າຫາກວ່າການປະຕິບັດສໍາລັບ SIGCHLD ຖືກຕັ້ງໃຫ້ SIG_IGN. ເບິ່ງພາກສ່ວນ LINUX NOTES ກ່ຽວກັບກະທູ້.)

EINVAL

ຖ້າການໂຕ້ຖຽງ ທາງເລືອກ ບໍ່ຖືກຕ້ອງ.

EINTR

ຖ້າ WNOHANG ບໍ່ໄດ້ກໍານົດແລະສັນຍານທີ່ບໍ່ເປີດເຜີຍຫຼື SIGCHLD ຖືກຈັບ.