Κλήση της λειτουργίας getpid στο C με παραδείγματα

Calling Getpid Function C With Examples



Getpid () είναι η συνάρτηση που χρησιμοποιείται για να λάβετε το αναγνωριστικό διεργασίας της διαδικασίας που καλεί αυτήν τη συνάρτηση. Το PID για την αρχική διαδικασία είναι 1 και, στη συνέχεια, σε κάθε νέα διαδικασία εκχωρείται ένα νέο αναγνωριστικό. Είναι μια απλή προσέγγιση για τη λήψη του PID. Αυτή η συνάρτηση σας βοηθά μόνο στη λήψη των μοναδικών αναγνωριστικών διεργασιών.

Λειτουργίες που χρησιμοποιούνται για τη λήψη αναγνωριστικών

Δύο τύποι ταυτότητας υπάρχουν εδώ. Το ένα είναι το τρέχον αναγνωριστικό του PID της διαδικασίας. Ενώ το άλλο είναι το αναγνωριστικό της γονικής διαδικασίας PPID. Και οι δύο αυτές συναρτήσεις είναι ενσωματωμένες συναρτήσεις που ορίζονται στη βιβλιοθήκη. Κατά την εκτέλεση του κώδικα χωρίς τη χρήση αυτής της βιβλιοθήκης μπορεί να προκληθεί σφάλμα και να σταματήσει η εκτέλεση.







συνάρτηση getpid () στο C

Όταν κάποια διαδικασία σχηματίζεται και εκτελείται, της αποδίδεται ένα μοναδικό αναγνωριστικό. Αυτό είναι το αναγνωριστικό της διαδικασίας. Αυτή η λειτουργία βοηθά στην επιστροφή του αναγνωριστικού της διαδικασίας που καλείται αυτήν τη στιγμή.



συνάρτηση getppid () στο C

Αυτό το αναγνωριστικό είναι χρήσιμο για την επιστροφή της διαδικασίας της γονικής διαδικασίας/συνάρτησης.



Παράδειγμα 1
Για να κατανοήσετε το παράδειγμα του PID στη διαδικασία στη γλώσσα C. Χρειάζεστε δύο εργαλεία: οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου και το τερματικό Linux, στο οποίο υποτίθεται ότι εκτελείτε τις εντολές. Δημιουργήστε ένα αρχείο σε οποιοδήποτε πρόγραμμα επεξεργασίας κειμένου. Δημιουργήσαμε ένα όνομα αρχείου code1.c καθώς ο κωδικός είναι γραμμένος σε γλώσσα C, οπότε θα πρέπει να αποθηκευτεί με την επέκταση .c.





Έχουμε προσθέσει μια μόνο βιβλιοθήκη. Στη συνέχεια, εδώ ξεκινά το κύριο πρόγραμμα. Στο κύριο πρόγραμμα, καλούμε την ενσωματωμένη συνάρτηση getpid (). για λήψη του αναγνωριστικού της τρέχουσας διαδικασίας. Και μια μεταβλητή εισάγεται και εκχωρείται. Για να αποθηκευτεί η τιμή της συνάρτησης PID () σε αυτήν τη μεταβλητή, τότε θα πάρουμε την εκτύπωση της τιμής χρησιμοποιώντας αυτήν τη μεταβλητή.



Τώρα θέλουμε να τρέξουμε τα περιεχόμενα αυτού του αρχείου στο τερματικό Linux. Η προϋπόθεση κώδικα είναι να καταρτιστεί πρώτα και στη συνέχεια να εκτελεστεί. Για τη σύνταξη, χρησιμοποιείται το GCC. Εάν το σύστημά σας δεν διαθέτει GCC, τότε πρέπει πρώτα να το εγκαταστήσετε χρησιμοποιώντας την εντολή Sudo.

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

$ GCC –ο κωδικός1 κωδικός1.γ

Ενώ –o χρησιμοποιείται για να ανοίξει το αρχείο αποθήκευσης στην εντολή. Στη συνέχεια, μετά από -o, γράφουμε το όνομα αρχείου.

Μετά τη μεταγλώττιση, εκτελέστε την εντολή.

$ ./code1

Η παραπάνω εικόνα δείχνει το αναγνωριστικό διεργασίας της συνάρτησης.

Παράδειγμα 2
Στο προηγούμενο παράδειγμα, χρησιμοποιούμε το PID. Αλλά σε αυτό το παράδειγμα, τόσο το PID όσο και το PPID χρησιμοποιούνται. Ο πηγαίος κώδικας για αυτήν τη λειτουργία είναι σχεδόν ο ίδιος με τον προηγούμενο. Μόνο που υπάρχει άλλη προσθήκη ταυτότητας.

Εξετάστε ένα αρχείο που περιέχει δύο μεταβλητές στο κύριο πρόγραμμα που εκχωρούνται από τα αναγνωριστικά διεργασίας. Το ένα είναι της τρέχουσας διαδικασίας και το άλλο είναι της γονικής διαδικασίας. Στη συνέχεια, παρόμοια με το πρώτο παράδειγμα, εκτυπώστε και τα δύο αναγνωριστικά μέσω των μεταβλητών τους.

Int pid_t = getpid ();
Int ppid_t = getppid ();

Αυτές οι δύο είναι οι κύριες συναρτήσεις ολόκληρου του κώδικα. Τώρα, μετά τη δημιουργία αρχείου, το επόμενο βήμα είναι η μεταγλώττιση και εκτέλεση του αρχείου. Μεταγλώττιση χρησιμοποιώντας το GCC στην εντολή. Μετά τη μεταγλώττιση, στη συνέχεια εκτελέστε το στο τερματικό του Ubuntu.

$ GCC –ο κωδικός1 κωδικός1.γ
$ ./code1

Η έξοδος δείχνει ότι εμφανίζεται πρώτα το αναγνωριστικό διεργασίας και στη συνέχεια εμφανίζεται το αναγνωριστικό γονικής διαδικασίας.

Παράδειγμα 3
Όλες οι διαδικασίες εκτελούνται και εκτελούνται με παράλληλο τρόπο. Οι διαδικασίες γονέα και παιδιού εκτελούν όλες τις υπόλοιπες γραμμές συλλογικά. Και τα δύο δίνουν αποτελέσματα κάθε φορά. Αλλά χρησιμοποιώντας ένα πιρούνι στον κωδικό C, εάν αυτή η συνάρτηση επιστρέψει μια τιμή μικρότερη από 0, σημαίνει ότι η κλήση της λειτουργίας τερματίζεται.

Εξετάστε ένα νέο αρχείο με δύο βιβλιοθήκες στην αντίστοιχη κεφαλίδα. Εδώ χρησιμοποιείται μια συνθήκη στην οποία έχουμε χρησιμοποιήσει τη δήλωση if-else. Στο κύριο πρόγραμμα, αναφέρεται ότι εάν η τιμή του πιρουνιού είναι σε –ive τιμή, θα εμφανίσει ένα μήνυμα ότι το αναγνωριστικό της διαδικασίας απέτυχε και δεν θα ληφθεί. Εάν η κατάσταση είναι ψευδής, τότε ο μεταγλωττιστής θα μετακινηθεί στο άλλο τμήμα της συνθήκης. Σε αυτό το μέρος, λαμβάνεται το αναγνωριστικό διεργασίας, στη συνέχεια θα εμφανίσουμε αυτό το αναγνωριστικό διεργασίας και θα εμφανίσουμε ένα μήνυμα ότι το αναγνωριστικό διεργασίας έχει ληφθεί. Εδώ θα παραθέσουμε τη δήλωση if-else του πηγαίου κώδικα.

Τώρα πάλι, μεταγλωττίστε τον κώδικα και, στη συνέχεια, εκτελέστε τον.

./κωδικός2

Η έξοδος δείχνει ότι το άλλο τμήμα έχει εκτελεστεί και θα εκτυπώσει το αναγνωριστικό διαδικασίας και στη συνέχεια θα εμφανίσει ένα μήνυμα PID.

Παράδειγμα 4

Αυτό είναι ένα άλλο παράδειγμα εξήγησης της ίδιας έννοιας. Η συνάρτηση Fork () επιστρέφει δύο διαφορετικές τιμές. Σε περίπτωση θυγατρικής διαδικασίας, η τιμή είναι 0, η οποία πρέπει να επιστραφεί. Ταυτόχρονα, η τιμή στην περίπτωση της διαδικασίας γονέα είναι το αναγνωριστικό διεργασίας του νέου παιδιού.

Σε αυτό το παράδειγμα, χρησιμοποιείται η ίδια συνθήκη if_else. Εδώ όμως, εφαρμόζονται δύο προϋποθέσεις. Συγκρίνοντας το PID που είναι μικρότερο από μηδέν και το άλλο ισούται με μηδέν. Εάν το PID είναι μικρότερο από μηδέν, τότε θα εμφανίσει ένα μήνυμα σφάλματος. Ενώ εάν το PID ισούται με μηδέν, σημαίνει ότι είναι μια θυγατρική διαδικασία και το άλλο μέρος δείχνει ότι εάν το PID είναι μεγαλύτερο από μηδέν, είναι μια γονική διαδικασία.

Τώρα μεταγλωττίστε και εκτελέστε τον κώδικα.

$ gcc –o code3 code3.c
$./code3

Από την έξοδο, μπορούμε να δούμε ότι το άλλο τμήμα εκτυπώνεται πρώτα σημαίνει ότι το αναγνωριστικό διεργασίας είναι μεγαλύτερο από 0.

Παράδειγμα 5
Εντάξει, αυτό είναι το τελευταίο παράδειγμα στο οποίο προσπαθήσαμε να συνοψίσουμε όλους τους κωδικούς που περιγράφονται παραπάνω για να εξηγήσουμε τη λειτουργία αυτής της συνάρτησης. Μπορούμε επίσης να χρησιμοποιήσουμε βρόχους με τις λειτουργίες fork () για να χρησιμοποιήσουμε τις λειτουργίες getpid (). Μπορούμε να χρησιμοποιήσουμε βρόχους για να δημιουργήσουμε πολλές παιδικές διαδικασίες. Εδώ πρέπει να χρησιμοποιήσουμε την τιμή 3 στον βρόχο.

Και πάλι πρέπει να χρησιμοποιήσουμε τη δήλωση υπό όρους στον κώδικα. Ο βρόχος for ξεκινά από το ένα και επαναλαμβάνεται μέχρι το 3rdστροφή.

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

$ GCC codes5.c –o s & ./code5

Τώρα προχωράμε προς την έξοδο του κώδικα. Το αναγνωριστικό της διαδικασίας γονέα είναι πανομοιότυπο σε όλες τις διαδικασίες του παιδιού. Αυτό σημαίνει ότι όλες αυτές οι διαδικασίες ανήκουν σε έναν γονέα. Αυτές οι διαδικασίες εκτελούνται η μία μετά την άλλη καθώς ο βρόχος περιορίζεται στο 3. Μόνο 3 επαναλήψεις θα γίνουν.

συμπέρασμα

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