Линукс Тушаалын талаар суралц

Нэр

wait, waitpid - процесс дуусахаа хүлээнэ үү

Ерөнхий агуулга

#include
#include

pid_t wait (int * status );
pid_t waitpid (pid_t pid , int * status , int сонголтууд );

Тодорхойлолт

Хүлээж авах үйлдэл нь хүүхдээс гадагш гарах хүртэл үргэлжилж байгаа үйл явцын гүйцэтгэлийг зогсоох буюу эсвэл одоо үйл явцыг зогсоох буюу дохиог харьцах функцийг дуудах хүртэл дохио дамжуулагдах хүртэл үргэлжилнэ. Хэрвээ хүүхэд дуудлага хийсний дараа гарчихсан ("зомби" гэж нэрлэгдэх процесс) гарч ирвэл функц тэр дороо эргэж ирдэг. Хүүхэд ашигладаг аливаа системийн эх үүсвэрийг чөлөөлнө.

Wait файлын функц нь тухайн процессыг pid аргументаар тодорхойлогдож байгаа хүүхэд хүртэл зогсоох эсвэл эсвэл процессыг зогсоох эсвэл дохиог хандах функц руу залгах хүртэл дохио дамжуулагдах хүртлээ хүлээгдэж байгаа процессыг зогсоох болно. Хэрэв хүүхэд нь pid -ээр хүсэлт гаргасан бол дуудлага хийгдсэн цагт ("zombie" гэж нэрлэгддэг процесс) гарч ирвэл функц тэр дороо эргэж ирдэг. Хүүхэд ашигладаг аливаа системийн эх үүсвэрийг чөлөөлнө.

Pid утга нь дараах байдалтай байж болно:

<-1

үйл явцын бүлгийн ID нь pid үнэмлэхүй утгатай тэнцүү байдаг хүүхдийн процессыг хүлээх гэсэн үг юм.

-1

Энэ нь хүүхдийн аливаа үйл явцыг хүлээх гэсэн утгатай; Энэ нь үзмэрийг хүлээж буй ижил үйлдэл юм.

0

үйл явцын бүлгийн ID нь дуудлагын үйл явцтай тэнцүү байдаг хүүхдийн процессыг хүлээх гэсэн үг юм.

> 0

Энэ нь процессийн ID нь pid утгатай тэнцүү байгаа хүүхдийг хүлээх гэсэн үг юм.

Опционы үнэ цэнэ нь дараахи тогтмолуудын тэг буюу түүнээс их байх юм:

WNOHANG

хүүхэд байхгүй бол нэн даруй эргэж ирнэ гэсэн үг.

WUNTRACED

Энэ нь зогссон хүүхдүүдийг эргэж очих мөн тэдний статусыг тайлагнахгүй гэсэн үг юм.

(Линукс-цорын ганц сонголтуудын хувьд доорхыг үзнэ үү.)

Статус нь NULL биш бол хүлээгдэж буй эсвэл төлөвт байршуулсан статусаар зааж өгсөн статусын мэдээллийг хүлээж байна.

Энэ төлөвийг дараах макрогоор үнэлж болно (эдгээр макрос статффистын буфер ( int ) -ыг argument дээр заагч биш харин нэмэлт өгөгдөл болгон авдаг!):

WIFEXITED ( статус )

Хүүхэд хэвийнээс гарахад хүрээгүй байдаг.

WEXITSTATUS ( статус )

дуусгавар болсон хүүхдийн буцах кодын хамгийн бага үл мэдэгдэх 8 хүртэлх утгыг үнэлэх бөгөөд энэ нь үндсэн хөтөлбөрт буцах дуудлага () эсвэл үндсэн хөтөлбөрийн буцах мэдэгдэлийн үндэслэл болж болох юм. Энэ макро нь WIFEXITED нь тэгээс буцаж ирээгүй тохиолдолд л үнэлэгдэнэ.

WIFSIGNALED ( статус )

Хэрвээ хүүхдийн процесс баригдаагүй байсан дохионы улмаас гарвал үр дүн нь үнэн болно.

WTERMSIG ( статус )

хүүхдийн үйл явцыг зогсооход хүргэсэн дохионы тоог буцаана. Энэ макро нь зөвхөн WIFSIGNALED тэгээс буцаж ирээгүй тохиолдолд үнэлэгдэнэ.

WIFSTOPPED ( статус )

буцаах шалтгаан болсон хүүхдийн процессыг зогсоосон бол үр дүн үнэн болно; Энэ дуудлага WUNTRACED ашиглан хийгдсэн тохиолдолд л боломжтой.

WSTOPSIG ( статус )

Хүүхэд зогсоход хүргэсэн дохионы тоог буцаадаг. Энэ макро нь зөвхөн WIFSTOPPED эргэж ирээгүй тохиолдолд үнэлэгдэнэ.

Unix-ийн зарим хувилбарууд (Линукс, Solaris, гэхдээ AIX, SunOS гэх мэт) нь макро WCOREDUMP ( статус ) -ийг тодорхойлж, хүүхдийн процесс нь үндсэн цөмийг устгасан эсэхийг шалгадаг. Зөвхөн #ifdef WCOREDUMP хавсаргасан байгаа ... #endif.

Буцах утга

WNOHANG гарч ирсэн, эсвэл 0-ээс хуучирсан хүүхдийн процедурын ID, эсвэл алдаа (энэ тохиолдолд тохирох утгад тохируулсан тохиолдолд).

Алдаа

ECHILD

хэрэв дээр дурдсан үйл явцыг зааж өгсөн бол pid байхгүй эсвэл дуудлага хийх үйл явцын хүүхэд биш юм. (Хэрэв SIGCHLD-ийн үйлдэл SIG_IGN-д тохируулсан бол энэ нь хүүхдэд тохиолдож болно.) LINUX ТАЙЛБАР хэсгийн талаар бас үзнэ үү.)

EINVAL

Хэрэв сонголтот аргумент буруу байсан бол.

EINTR

хэрэв WNOHANG тогтоогоогүй, эсвэл хаалттай дохио эсвэл SIGCHLD баригдсан бол.