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

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

Δημοσ.

Γειά,

προσπαθώ να δημιουργήσω ενάν συγκεκριμένο αριθμό διεργασιών στο πρόγραμμα μου, δλδ έχω μια μεταβλητή int ar_dierg.

προσπάθησα έτσι:

>
for(i=0;i<ar_dierg;i++){
pid=fork()}

αλλά δημιουργούνται πολλές παραπάνω διεργασίες από όσες θέλω.

Καμία ιδέα ;;

Δημοσ.

από τα λίγα δεδομένα που μας δίνεις για το πρόβλημα σου αυτό που μπορω να υποθέσω είναι ότι κάνεις κάποιο λάθος μετά στις if για τη διάκριση πατέρα-παιδιού.

Δημοσ.

Το πρόβλημα στον κώδικα σου είναι το εξής, όταν δημιουργείται ένα παιδί, εκτελεί κι αυτό το loop για όσες επαναλήψεις έχουνε μείνει. Π.χ αν το ar_dierg είναι 10, η 1η διεργασία που θα δημιουργηθεί θα φτίαξει άλλες 9, η 2η θα φτιάξει άλλες 8 κ.ο.κ Επίσης αυτές οι 9 και 8 κτλ διεργασίες θα δημιουργήσουν κι αυτές δικές τους. Οπότε πρέπει να βρεις ένα τρόπο να καλείται η fork μόνο για την διεργασία root. ;)

Δημοσ.

Όπως τα λέει ο Erevis είναι τα πράγματα.

 

Με την εντολή getpid() γενικά παίρνεις το process id κάθε διεργασίας...

 

Άρα... αν το καλέσεις πριν δημιουργήσεις άλλη διεργασία και βάλεις το αποτέλεσμα του σε μια μεταβλητή, μετά θα μπορείς να έχεις έλεγχο ποια διεργασία είναι η root και ποια όχι.

Δημοσ.

Μπορεί κάποιος να γράψει ένα παράδειγμα ;;

Δηλάδη αν πχ ήθελα να φτιάξω 10 διεργασίες πως θα το έκανα ;;

Δεν πρέπει να βάλω την fork() σε μια δομή επανάληψης ;;

Δημοσ.

Κάτι τέτοιο φαντάζομαι. Κάνει break από το for στην περίπτωση που δεν ειναι η root διεργασία.

 

>
int r = getpid();

int ar_dierg = 10;

int i, pid;

for(i=0;i<ar_dierg;i++)
{
pid=fork();
if(getpid() != r) // break if not root proc
	break;
}

Δημοσ.

Όπως λεει ο από πάνω με break στη for θα το λύσεις το θέμα αλλά όχι στην if που δίνει. Στην if που ελέγχεις αν είναι το pid==0.

Δημοσ.

Μα με την r = getpid() που έβαλα πριν το forum δεν θα πάρει το pid της root; Οπότε θα κάνει break αν δεν ειναι η root στο for.

 

Στη θυγατρική διεργασία θες να μπαίνει η break.

Δημοσ.

η root όπως τη λες είναι η πατρική διεργασία. Άλλο id έχει η πατρική και άλλο η θυγατρική. Το ίδιο λέμε με τον κώδικα. Απλά με τον τρόπο που το δίνεις εσυ συμπεριλαμβάνεις κ την περίπτωση αποτυχίας σε μια εντολή και άλλο θες να κάνει στην αποτυχία και άλλο όταν εκτελείται η θυγατρική.

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

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

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

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

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

Σύνδεση

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

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