2016-04-07 34 views
0

Geçerli değer beklemede() işlevini yazdırmaya çalışıyorum. Çıktıdan ne düşündüğüm, alt işlemin yürütüldüğü zaman çocuk bağlamındaki wait() öğesinin geçerli değeri -1'dir ve tamamlandığında ve döndükten sonra ana bağlamda wait() değeri çocuğun pidine eşittir. Anladığım şey, anladığımdan doğru mu?C programında wait() dönüş değeri()

#include<stdio.h> 
#include<stdlib.h> 

int main() 

{ 
int statloc; 
int stat; 
printf("\nthis process id is %d", getpid()); 

int pid; 
pid =fork(); 
stat=wait(&statloc); 

printf("\n Value of stat is %d",stat); 
getchar(); 
} 

Çıktı:

 this process id is 10740 
Value of stat is -1k     // k is entered as input due to getchar 
     this process id is 10740 
Value of stat is 10741j    // j is entered as input due to getchar 
+0

Yalnızca ebeveyn beklemelidir. Ayrıca, fork() 'nın çocuğun içinde döndükten sonra asenkron güvensiz işlevleri çağırması UB olduğunu unutmayın. –

+1

adam bekleyin: "wait(): başarı durumunda, sonlandırılan çocuğun işlem kimliğini döndürür; hatada, -1 döndürülür." – jdarthenay

+0

@KerrekSB: Tamam evet, aptal ben, anlıyorum bekle() iki katın değerinden . Yani benim sorum bekle-çocuk çıkana kadar -1 ve sonra çıkmış çocuğun pidinin değeri var mı? – theartist33

cevap

0

ben senin anlayış yanlış olduğunu düşünüyorum.

Bekleme kullanımı, alt işlemlerden herhangi birinin çıkması için bekler. Alt işlemden çıkılırsa, çıkarılan alt işlemin işlem kimliğini döndürür ve bekletme işlevi için işlenen iletideki işlemin çıkış durumunu depolar.

WEXITSTATUS() makrosu kullanarak çıkış durumunu alabilirsiniz.

Bu makroda bekleme sistem çağrısına iletilen argümanı geçmemiz gerekiyor. Geçersek, işlemin gerçek çıkış durumunu döndürür.

Beklemeyle ilgili daha fazla bilgi edinmek için aşağıdaki bağlantıyı okuyun.

http://man7.org/linux/man-pages/man2/wait.2.html

+0

Bunu biliyorum, bu konuda beklediğim şey() -1, çünkü çocuk hala çalışıyor ve çocuk bir kez bekletiliyor() beklemede olduğu gibi çocuğun pidine karşılık geliyor. Bu, yorumda @ Ctx tarafından siliniyor – theartist33

+0

ohh Tamam. Bu yorumu okudum. –

+0

Ve bir şey, eğer herhangi bir argümanı wait() 'e aktarmamış olsaydık, eğer süreçten çıkılırsa, o zaman da -1 döndürür. Çıkılan çocuğun işlem kimliği değil. –