bagaimana anak dalam program ini akan berjalan?

Saya tidak sepenuhnya memahami fungsi fork, saya tidak mengerti bagaimana ayah dan anak memproses kelanjutan dari fungsi fork() atau melewati baris ini dan melanjutkan ke yang berikutnya. Misalnya:

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

ketika kita mengimplementasikan fungsi fork, ayah pergi ke fungsi wait() tetapi apa yang saya tidak mengerti dari mana anak itu mulai lari dari if() atau dia melarikan diri dan segera pergi ke printf? Terima kasih telah membantu :)


person Eli    schedule 13.04.2016    source sumber
comment
Apa yang terjadi ketika Anda mencobanya?   -  person Martin James    schedule 13.04.2016
comment
sebenarnya tidak, saya hanya mencoba memahami fork dan apa yang akan terjadi dalam fungsi ini   -  person Eli    schedule 13.04.2016
comment
Mengapa kamu tidak mencobanya? Menjalankannya akan menunjukkan cara kerjanya.   -  person Martin James    schedule 13.04.2016
comment
Saya sedang belajar Sistem Operasi dan saya baru dalam semua ini jadi saya tidak tahu bagaimana melakukannya. menurutku aku memerlukan linux yang tidak kumiliki :/   -  person Eli    schedule 13.04.2016
comment
jika Anda sedang mempelajari sistem operasi maka hal pertama yang harus Anda lakukan adalah menyiapkan sistem linux atau vm di windows terlebih dahulu. Saya sangat menyarankan Anda untuk menjalankan program terlebih dahulu dan menggunakan gdb dan men-debug program yang Anda tulis.   -  person Sridhar Nagarajan    schedule 13.04.2016
comment
Satu proses memanggil fork, namun ia kembali pada masing-masing dua proses.   -  person David Schwartz    schedule 13.04.2016
comment
Saya tidak mengerti - jika Anda tidak memiliki OS dan/atau kode sumber yang Anda buat dan uji..... dari mana kode tersebut berasal?   -  person Martin James    schedule 13.04.2016


Jawaban (2)


Seluruh program diduplikasi dan ayah dan anak mulai dari fork() Ayah masuk ke dalam if karena nilai pengembalian garpunya bukan nol, dan setelah itu pergi ke

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

sedangkan anak langsung saja ke baris ini, karena pidnya nol.

Anaknya keluar 2 karena jalur value += 2.

Sang ayah menunggu nilai tersebut (yaitu nilai = 2), menaikkannya (nilai = 3), lalu menambahkan 2 (nilai = 5).

person Boiethios    schedule 13.04.2016
comment
Jika saya mengerti benar itu berarti jika proses anak dan ayah berfungsi maka outputnya adalah: 0 lalu 3? - person Eli; 13.04.2016

fork() pada dasarnya membuat salinan dari proses yang memanggilnya.

Itu berarti status runtime dari proses tersebut ketika dipanggil fork(), termasuk penunjuk instruksi saat ini. Perbedaan utama antara proses induk dan anak adalah salinan baru dari proses lama dimodifikasi sehingga nilai kembalian dari fork() akan mengembalikan 0 sedangkan untuk proses lama mengembalikan PID.

Kecuali untuk itu, anak akan berada dalam keadaan yang sama dengan induknya dan melanjutkan eksekusi dari titik yang sama dengan induknya, yaitu panggilan ke fork().

person JimmyB    schedule 13.04.2016