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

Help me εντολη fork σε λειτουργικα συστηματα


poths

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

Δημοσ.

το προβλημα μου ειναι το εξης: οταν χρησιμοποιεις την εντολη fork σε προγραμματισμο λειτουργικων συστηματων...λεει η θεωρια οτι ....επιστρεφει στον πατερα(parent proccess) το process id του (παιδιου) child id...τι ενοει με αυτο ο ποιητης.

Ευχαριστω εκ των προτερων

Δημοσ.
το προβλημα μου ειναι το εξης: οταν χρησιμοποιεις την εντολη fork σε προγραμματισμο λειτουργικων συστηματων...λεει η θεωρια οτι ....επιστρεφει στον πατερα(parent proccess) το process id του (παιδιου) child id...τι ενοει με αυτο ο ποιητης.

Ευχαριστω εκ των προτερων

 

>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main ()
{
 pid_t pid;
 pid=fork();
 if (pid>0)
   {
   //εκτέλεση πατέρα
   }
 if (pid==0)
   {
                  //εκτέλεση παιδιού
   }
else
{
printf("Error\n");
   exit(1);
}
return 0;
}

Νομίζω πως αυτό ισχύει για αυτό που ζητάς. Για να καλυψεις θεωρητικά τα κενά σου μπορείς και να το ψάξεις λίγο παραπάνω μόνος σου νομίζω...

Δημοσ.

Κάθε process έχει ένα id που το χαρακτηρίζει, όπως εσύ το όνομα σου.

Ε, όταν καει fork() σε *nix συστήματα, το fork προφανώς θα γίνει μέσα σε ένα process και όταν τελειώσει η κλήση συστήματος, τότε θα επιστραφεί μια τιμή. Η τιμή αυτή είναι το process id του process που δημιουργήθηκε.

 

Σημείωση σχεδόν προφανής: Το system call fork() δημιουργεί ένα καινούργιο process (και μάλιστα είναι ο μοναδικός τρόπος να γίνει αυτό).

 

EDIT: Ο κώδικας παραπάνω είναι λάθος καθώς δεν ξέρεις ότι το pid του καινούργιου process είναι 1. Έλεγχος διάφορος του μηδενός χρειαζόταν εκεί. Αν δεν κάνω λάθος σε linux pid == 1 ισχύει για το init.

Δημοσ.

Αν ελεγχεις μονο για διάφορο του 0 δεν ξέρεις πότε απέτυχε η fork και πότε εκτελέιται ο πατέρας.. Μια άλλη εκδοχή ίσως είναι:

>#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
main ()
{
 pid_t pid;
 pid=fork();
 if (pid==-1)
{
 printf("Error\n");
exit(1);
}
 if (pid==0)
{
                  //εκτέλεση παιδιού
}
else
{
//εκτέλεση πατέρα
}
return 0;
}

η οποία είναι σίγουρα σωστή γιατί την έχω παραδώσει και σε εργασία (εμπλουτισμένη).

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...