Η κλήση fork

Η κλήση fork() διασπά την τρέχουσα διεργασία σε δύο: το γονέα, και το παιδί. Και οι δύο διεργασίες αποτελούνται από τον ίδιο κώδικα, τα ίδια δεδομένα, και βρίσκονται στο ίδιο στάδιο της εκτέλεσής τους. Το παιδί κληρονομεί από το γονέα διάφορα στοιχεία όπως τους περιγραφείς των ανοικτών αρχείων, και το περιβάλλον εκτέλεσης. Ο διαχωρισμός του γονέα από το παιδί γίνεται με βάση την τιμή που επιστρέφει η fork: σε περίπτωση επιτυχίας, στο γονέα επιστρέφει τον κωδικό της διεργασίας του παιδιού, ενώ στο παιδί επιστρέφει 0. (Το παιδί μπορεί να βρει τον κωδικό της διεργασίας του γονέα με την κλήση getppid() (get parent process id)). Τυπικά η κλήση της fork() γίνεται με βάση το παρακάτω μοντέλο:
	int pid;

	pid = fork();
	if (pid == 0) {
		/* I am the child process */
		...
	} else {
		/* I am the parent process */
		...
	}

Παράδειγμα

Υλοποιήστε δύο διεργασίες που εκτελούνται παράλληλα τυπώνοντας διαφορετικά στοιχεία (π.χ. αυξανόμενους αριθμούς). Παρατηρήστε το αποτέλεσμα του χρονοπρογραμματισμού στην αλλαγή της διεργασίας που εκτελείται. (Επιτρέψτε σε κάθε διεργασία να τυπώσει τουλάχιστον 10000 γραμμές).