Linux komandasını öyrənin - gözləyin

Adı

wait, waitpid - prosesin dayandırılmasını gözləyin

Sinopsis

#include
#include

pid_t wait (int * statusu );
pid_t waitpid (pid_t pid , int * status , int variantları );

Təsvir

Gözləmə funksiyası, bir uşaq çıxdıqdan və ya cari prosesi ləğv etmək və ya bir siqnal idarə funksiyasını çağırmaq üçün olan bir siqnal çatana qədər mövcud prosesin icrasını dayandırır. Bir uşağın zəng zamanı ("zombi" prosesi) artıq çıxdıqda, funksiya dərhal qaytarılır. Uşaq tərəfindən istifadə olunan hər hansı bir sistem resursu azaddır.

Waitpid funksiyası, pid sübutunun göstərdiyi kimi bir uşaqya qədər mövcud prosesin icrasını dayandırır və ya hərəkəti cari prosesi dayandırmaq və ya bir siqnal işləmə funksiyasını çağırmaq üçün olan bir siqnal verildikdən sonra. Pid tərəfindən tələb olunan bir uşaq artıq zəng zamanı (bir "zombi" prosesi) çıxdıqda, funksiya dərhal qaytarılır. Uşaq tərəfindən istifadə olunan hər hansı bir sistem resursu azaddır.

Pid dəyəri aşağıdakılardan biri ola bilər:

<-1

bu, proses qrupu kimliyi pid mütləq dəyərinə bərabər olan hər hansı bir uşaq prosesini gözləmək deməkdir.

-1

hər hansı bir uşaq prosesini gözləmək deməkdir; bu, eksponatları gözləyən eyni davranışdır.

0

proses qrupu kimliyi çağırış prosesinə bərabər olan hər hansı bir uşaq prosesini gözləmək deməkdir.

> 0

proses kimliyi pid dəyərinə bərabər olan uşağı gözləmək deməkdir.

Variantların dəyəri aşağıdakı sabitlərin sıfır və ya daha çoxunu təşkil edir:

WNOHANG

heç bir uşaq çıxmadıqda dərhal qayıtmaq deməkdir.

WUNTRACED

bu da dayandırılmış olan uşaqlara qayıtmaq və vəziyyəti bildirilməməsi deməkdir.

(Linux yalnız variantları üçün aşağıya baxın.)

Durum NULL deyilsə, bekle və ya waitpid statusu vəziyyətini statusu ilə göstərilən yerdə saxlaya bilərsiniz.

Bu vəziyyət aşağıdakı makrolarla qiymətləndirilə bilər (bu makrolar, bu tampon ( int ) argumenti --- bufer üçün göstərici deyil!):

WIFEXITED ( status )

uşaq normal halda çıxdıqda sıfır deyil.

WEXITSTATUS ( status )

Çıxış çağırışının arqumenti olaraq təyin edilmiş ola biləcək və ya ana proqramda bir qaytarma bəyanatının arqumenti olaraq təyin edilmiş, uşağın qaytarılma kodunun ən az əhəmiyyətli səkkiz bitini qiymətləndirir. WIFEXITED qeyri-sıfır dönsəydi, bu makroyu yalnız qiymətləndirmək olar.

WIFSIGNALED ( status )

uşaq prosesi tutulmayan bir siqnal üzündən çıxdıqda doğru qaytarır.

WTERMSIG ( status )

uşaq müddətini ləğv etməyə səbəb olan siqnal sayını qaytarır. WIFSIGNALED sıfır deyilsə, bu makroyu yalnız qiymətləndirmək olar.

WIFSTOPPED ( status )

qaytarılmaya səbəb olan uşaq prosesi hazırda dayandırıldığı təqdirdə doğru olur; bu zəng yalnız WUNTRACED istifadə edildikdə mümkündür .

WSTOPSIG ( status )

uşağın dayandırmasına səbəb olan siqnalın sayını qaytarır. WIFSTOPPED qeyri-sıfır döndürülmüşse, bu makroyu yalnız qiymətləndirmək olar.

Unix'in bəzi versiyaları (məsələn, Linux, Solaris, lakin AIX, SunOS) da uşaq prosesinin yaddan çıxarıldığını yoxlamaq üçün makro WCOREDUMP ( statusu ) təyin edir. Yalnız bunları #ifdef WCOREDUMP ... #endif-də istifadə edin.

Dönüş dəyəri

Uşaqdan çıxan və ya WNOHANG istifadə edildiyində sıfır və heç bir uşağın mövcud olmadığı proses kimliyi və ya səhvən -1 ( errno müvafiq bir dəyərə qoyulduğu halda).

Səhvlər

ECHILD

prosesdə göstərildiyi təqdirdə pid yoxdur və ya çağırış prosesinin bir uşağı deyil. (SIGCHLD üçün fəaliyyət SIG_IGN olaraq təyin edildikdə bu öz övladına görə baş verə bilər. Həmçinin mövzular haqqında LINUX QEYDLƏR bölməsinə baxın.)

EINVAL

variantlar arqumenti etibarsızdır.

EINTR

WNOHANG qurulmadıqda və siqnalı çıxarılan bir siqnal yaxud SIGCHLD tutuldu.