Μάθετε την εντολή Linux - περιμένετε

Ονομα

περιμένετε, waitpid - περιμένετε για τερματισμό της διαδικασίας

Σύνοψη

#include
#include

pid_t wait (int * status );
pid_t waitpid (pid_t pid , int * κατάσταση , int επιλογές );

Περιγραφή

Η λειτουργία αναμονής αναστέλλει την εκτέλεση της τρέχουσας διαδικασίας μέχρι να εξέλθει ένα παιδί ή μέχρι να παραδοθεί ένα σήμα του οποίου η ενέργεια είναι να τερματίσει την τρέχουσα διαδικασία ή να καλέσει μια λειτουργία χειρισμού σημάτων. Εάν ένα παιδί έχει ήδη βγει από την ώρα της κλήσης (μια διαδικασία που αποκαλείται "ζόμπι"), η λειτουργία επιστρέφει αμέσως. Οι πόροι του συστήματος που χρησιμοποιούνται από το παιδί απελευθερώνονται.

Η λειτουργία waitpid αναστέλλει την εκτέλεση της τρέχουσας διαδικασίας μέχρι να εξέλθει ένα παιδί όπως καθορίζεται από το όρισμα pid ή έως ότου παραδοθεί ένα σήμα του οποίου η ενέργεια είναι να τερματίσει την τρέχουσα διαδικασία ή να καλέσει μια λειτουργία χειρισμού σημάτων. Εάν ένα παιδί, όπως ζητήθηκε από το pid, έχει ήδη εξέλθει από την ώρα της κλήσης (μια αποκαλούμενη διαδικασία "ζόμπι"), η λειτουργία επιστρέφει αμέσως. Οι πόροι του συστήματος που χρησιμοποιούνται από το παιδί απελευθερώνονται.

Η αξία του pid μπορεί να είναι μία από τις εξής:

<-1

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

-1

που σημαίνει να περιμένετε για οποιαδήποτε διαδικασία παιδιού. αυτή είναι η ίδια συμπεριφορά που περιμένει εκθέματα.

0

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

> 0

που σημαίνει να περιμένουμε για το παιδί του οποίου το αναγνωριστικό διαδικασίας είναι ίσο με την αξία του pid .

Η τιμή των επιλογών είναι μηδέν ή περισσότερες από τις ακόλουθες σταθερές:

WNOHANG

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

WUNTRACED

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

(Για επιλογές μόνο για Linux, δείτε παρακάτω.)

Εάν η κατάσταση δεν είναι NULL , περιμένετε ή waitpid αποθηκεύει τις πληροφορίες κατάστασης στην τοποθεσία που αναφέρεται από την κατάσταση .

Αυτή η κατάσταση μπορεί να εκτιμηθεί με τις ακόλουθες μακροεντολές (αυτές οι μακροεντολές παίρνουν το buffer του stat ( int ) ως επιχείρημα --- όχι δείκτης στο buffer!):

WIFEXITED ( κατάσταση )

είναι μη-μηδέν εάν το παιδί βγήκε κανονικά.

WEXITSTATUS ( κατάσταση )

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

WIFSIGNALED ( κατάσταση )

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

WTERMSIG ( κατάσταση )

επιστρέφει τον αριθμό του σήματος που προκάλεσε την τερματισμό της διαδικασίας του παιδιού. Αυτή η μακροεντολή μπορεί να αξιολογηθεί μόνο αν το WIFSIGNALED επέστρεψε μη μηδέν.

WIFSTOPPED ( κατάσταση )

επιστρέφει true αν η διαδικασία παιδιού που προκάλεσε την επιστροφή σταματά αυτήν τη στιγμή. αυτό είναι εφικτό μόνο αν η κλήση έγινε με το WUNTRACED .

WSTOPSIG ( κατάσταση )

επιστρέφει τον αριθμό του σήματος που προκάλεσε τη διακοπή του παιδιού. Αυτή η μακροεντολή μπορεί να αξιολογηθεί μόνο εάν το WIFSTOPPED επέστρεψε μη μηδέν.

Ορισμένες εκδόσεις του Unix (π.χ. Linux, Solaris, αλλά όχι AIX, SunOS) ορίζουν επίσης μια μακροεντολή WCOREDUMP ( κατάσταση ) για να ελεγχθεί αν ο πυρήνας του παιδιού διεγείρεται . Χρησιμοποιήστε μόνο αυτό που περικλείεται στο #ifdef WCOREDUMP ... #endif.

Τιμή επιστροφής

Το αναγνωριστικό διαδικασίας του παιδιού που εξήλθε ή το μηδέν εάν χρησιμοποιήθηκε WNOHANG και κανένα παιδί δεν ήταν διαθέσιμο ή -1 για σφάλμα (οπότε στην περίπτωση αυτή το errno έχει οριστεί σε κατάλληλη τιμή).

Λάθη

ECHILD

εάν η διαδικασία που καθορίζεται στο το pid δεν υπάρχει ή δεν είναι παιδί της διαδικασίας κλήσης. (Αυτό μπορεί να συμβεί για το δικό σας παιδί εάν η ενέργεια για το SIGCHLD έχει οριστεί σε SIG_IGN. Δείτε επίσης την ενότητα LINUX NOTES σχετικά με τα θέματα.)

EINVAL

εάν το παράθυρο επιλογών δεν ήταν έγκυρο.

EINTR

αν δεν έχει οριστεί το WNOHANG και έχει παγιδευτεί ένα ξεκλειδωμένο σήμα ή ένα SIGCHLD .