Linux Komutunu Öğrenin - bekleyin

isim

bekleyin, waitpid - işlem sonlandırma için bekleyin

özet

#include
#include

pid_t wait (int * durumu );
pid_t waitpid (pid_t pid , int * durumu , int seçenekleri );

Açıklama

Bekleme işlevi, bir çocuk çıkana kadar veya mevcut işlemi sonlandırmak veya bir sinyal işleme işlevini çağırmak olan bir sinyal iletilene kadar geçerli işlemin yürütülmesini askıya alır. Çocuğunuz çağrı zamanından (halihazırda "zombi" işlemi) çıkmışsa, işlev hemen geri döner. Çocuğun kullandığı sistem kaynakları serbest bırakılır.

Waitpid işlevi, pid argümanı tarafından belirtilen bir çocuk çıkana kadar veya mevcut işlemi sonlandırmak veya bir sinyal işleme işlevini çağırmak için bir sinyal iletilene kadar mevcut işlemin yürütülmesini askıya alır. Pid tarafından talep edilen bir çocuk, çağrı süresi ("zombi" adı verilen bir işlem) tarafından halihazırda çıkmışsa, işlev hemen döner. Çocuğun kullandığı sistem kaynakları serbest bırakılır.

Pid değeri şunlardan biri olabilir:

<-1

süreç grubu kimliği pid'in mutlak değerine eşit olan herhangi bir alt süreci beklemek anlamına gelir.

-1

herhangi bir çocuk sürecini beklemek anlamına gelir; Bu, sergileri bekleyen aynı davranıştır.

0

süreç grubu kimliği , çağrı sürecininkine eşit olan herhangi bir alt süreci beklemek anlamına gelir.

> 0

süreç kimliği pid değerine eşit olan çocuğu beklemek anlamına gelir.

Seçeneklerin değeri, aşağıdaki sabitlerin sıfır veya daha fazla bir OR değeridir:

WNOHANG

çocuk çıkmazsa hemen geri dönmek demektir.

WUNTRACED

Bu da durdurulan ve statüsü bildirilmeyen çocuklar için geri dönüş anlamına gelir.

(Sadece Linux seçenekleri için aşağıya bakın.)

Durum NULL değilse , duruma göre işaretlenen konuma bekleme durumunu bekleyin veya bekleyin .

Bu durum, aşağıdaki makrolarla değerlendirilebilir (bu makrolar, arabelleğe bir işaretçi değil, bir argüman olarak durum arabelleğini alır (bir int )!):

WIFEXITED ( durum )

Çocuğun normal olarak çıkması durumunda sıfır değildir.

WEXITSTATUS ( durum )

Çocuğun çıkış kodunun en az sekiz bitini sonlandırır, bu da sonlandırılan bir çağrının argümanı olarak veya ana programdaki bir geri dönüş ifadesi için argüman olarak ayarlanmış olabilir. Bu makro sadece WIFEXITED sıfırdan döndürüldüğünde değerlendirilebilir.

WIFSIGNALED ( durum )

Çocuk süreci yakalanmayan bir sinyalden dolayı çıktığı takdirde, doğru döner.

WTERMSIG ( durum )

Çocuk işleminin sonlandırılmasına neden olan sinyal sayısını döndürür. Bu makro sadece WIFSIGNALED sıfırdan döndürüldüğünde değerlendirilebilir.

WIFSTOPPED ( durum )

geri dönüşe neden olan çocuk işlemi şu anda durdurulduysa, doğru döner; Bu sadece çağrı WUNTRACED kullanılarak yapıldıysa mümkündür .

WSTOPSIG ( durum )

Çocuğun durmasına neden olan sinyal sayısını döndürür. Bu makro sadece WIFSTOPPED sıfırdan döndürüldüğünde değerlendirilebilir.

Unix'in bazı sürümleri (örneğin, Linux, Solaris, ama AIX değil, SunOS), aynı zamanda, çocuk işleminin çekirdeğin çekilip çekilmediğini test etmek için bir makro WCOREDUMP ( durum ) tanımlar. Bunu sadece #fdef WCOREDUMP ... #endif dosyasında kullanabilirsiniz.

Geri dönüş değeri

Çıkılan çocuğun işlem kimliği veya WNOHANG kullanıldıysa ve çocuk bulunmazsa sıfır veya hata durumunda -1 değeri (bu durumda errno uygun bir değere ayarlanır).

Hatalar

ECHILD

işlem belirtilen pid mevcut değil veya çağrı sürecinin bir çocuğu değil. (Bu, SIGCHLD için eylem SIG_IGN olarak ayarlanmışsa, kendi çocuğu için olabilir. Ayrıca konuyla ilgili LINUX NOTES bölümüne bakın.)

EINVAL

seçenekler argümanı geçersizse

EINTR

WNOHANG ayarlanmamışsa ve bloklanmamış bir sinyal veya bir SIGCHLD yakalanmışsa.