Προς το περιεχόμενο

Εντολή fork().


Voziniotis-3

Προτεινόμενες αναρτήσεις

καλησπέρα. θέλω να ρωτήσω το εξής.

 

Στην εντολή συστήματος fork όταν την καλείς για να δημιουργήγσει μια διεργασία-παιδί, αυτή επιστρέφει ένα νούμερο. Αν είναι αρνητικό σημαίνει ότι δεν δημιουργήθηκε. Δεκτόν !!!. Αν είναι 0 τότε τρέχει ο κώδικας του παιδιού ενώ αν είναι θετικός τρέχει ο κώδικας του γονέα. Αυτό το σημείο δεν καταλαβαίνω. Πως δηλαδή ενώ είναι δημιουργείτε το παιδί εμείς να τρέχουμε κώδικα για τον γονιό. Η το αντίστροφο.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η fork() δημιουργεί ένα πανομοιότυπο αντίγραφο του γονέα με μοναδική διαφορά [1] το return value που επιστρέφει η fork(). Στο παιδί εμφανίζεται 0, στον γονιό >0. Μπορεί να βλέπεις έναν ενιαίο κώδικα if/else εσύ που το γράφεις, αλλά απ'τη στιγμή που θα γίνει η κλήση fork() έχεις δύο processes που το καθένα εκτελεί διαφορετικό κλάδο του if/else.

 

[1] Για την ακρίβεια διαφέρουν και αλλού. Για πλήρη λίστα των διαφορών: man fork.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Διάβασε καλύτερα σχετικά με το πως δουλεύει το fork. Αν επιτύχει η κλήση, μετά έχεις 2 processes που τρέχουν, το parent και το child. Και τρέχουν τον ίδιο κώδικα, αυτόν που έχεις γράψει εσύ. Για αυτό και χρησιμοποιώντας την επιστρεφόμενη τιμή μπορείς να διαφοροποιήσεις τι τρέχει το κάθε ένα.

 

Να συμπληρώσω το εξής στην προηγούμενη απάντηση καθώς πρόσφατα διάβαζα ένα άρθρο σχετικά με τη λάθος χρήση της:

 

RETURN VALUE
       On  success,  the PID of the child process is returned in the parent, and 0 is returned in the child.  On failure, -1 is returned in the parent, no child process is created, and errno is set appropriately.
 

Μην ξεχνάς να ελέγχεις για failure.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...