2016-04-13 75 views
0

Çatal fonksiyonunu tam olarak anlayamıyorum, baba ve çocuğun fork() fonksiyonundan nasıl devam ettiğini anlamadım ya da bu satırı atlayıp bir sonrakine geçiyorum. örneğin:Bu programdaki çocuğun nasıl çalıştırılacağı?

int value = 0; 
if (fork()!=0) 
{ 
wait(&value); 
value = WEXITSTATUS(value); 
value++; 
} 
printf("%d\n",value); 
value+=2; 
exit(value); 

bebeğin babasının bekleme() fonksiyonu için gitmek ama çocuk kaçmaya başlar yerden ben bunu anlamıyorum eğer() veya o kaçıp gitmek neyi çatal işlevini uyguladıklarında printf için hemen? :)

+0

Denediğinde ne oldu? –

+0

Aslında ben sadece çatalı anlamaya çalışmıyorum ve bu fonksiyonda ne olacak? – Eli

+1

Neden denemedin? Koşmak onun operasyonunu gösterirdi. –

cevap

0

tüm program yineleniyor ve yardımcı olduğunuz için teşekkürler baba ve oğul hem çatal dönüş değeri olmayan boş olduğu için babası if içine girmek fork() itibaren başlar ve sonra

printf("%d\n",value); 
value+=2; 
exit(value); 

gidin Oğul sadece bu satıra giderken, pid sıfırdır.

oğul 2 çünkü hat value += 2 arasında çıkar.

baba (= 2, yani değeri), sonra değerini bu değer bekler (değeri = 3), ve daha sonra ilave 2 (değeri = 5). çağırmak sürecin

+0

Eğer bu doğru anlamadıysam, eğer çocuk ve baba süreci işe yararsa, o zaman çıktı: 0 ve sonra 3? – Eli

+0

Yukarıdaki düzenlemeye bakın. – Boiethios

0

fork() temelde makes a copy. mevcut kullanıcı işaretçi de dahil olmak üzere, fork() denilen işlemin zamanı durumuna karşılık gelmektedir

. ebeveyn ve çocuk süreci arasındaki temel fark, eski süreç için bir PID döndürür iken fork() dönüş değeri 0 dönecektir böylece eski sürecin yeni kopyası değiştirilmiş olmasıdır. Bunun dışında, çocuk üst öğe ile aynı durumda olacak ve üst öğe ile aynı noktadan, yani fork() numaralı çağrıya devam edecektir.