Σήμα - εντολή Linux / Unix

Το Linux υποστηρίζει και αξιόπιστα σήματα POSIX (στο εξής "τυπικά σήματα") και σήματα POSIX σε πραγματικό χρόνο.

Πρότυπα σήματα

Το Linux υποστηρίζει τα τυπικά σήματα που αναφέρονται παρακάτω. Αρκετοί αριθμοί σημάτων εξαρτώνται από την αρχιτεκτονική, όπως υποδεικνύεται στη στήλη "Τιμή". (Όπου δίδονται τρεις τιμές, η πρώτη ισχύει συνήθως για τα alpha και sparc, το μέσο για το i386, ppc και sh, και το τελευταίο για τα mips.

A - υποδηλώνει ότι ένα σήμα δεν υπάρχει στην αντίστοιχη αρχιτεκτονική.)

Οι καταχωρίσεις στη στήλη "Δράση" του πίνακα καθορίζουν την προεπιλεγμένη ενέργεια για το σήμα, ως εξής:

Ορος

Η προεπιλεγμένη ενέργεια είναι να τερματίσετε τη διαδικασία.

Ign

Η προεπιλεγμένη ενέργεια είναι να αγνοήσετε το σήμα.

Πυρήνας

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

Να σταματήσει

Η προεπιλεγμένη ενέργεια είναι να σταματήσετε τη διαδικασία.

Πρώτα τα σήματα που περιγράφονται στο αρχικό πρότυπο POSIX.1.

Σήμα αξία Δράση Σχόλιο
ή το θάνατο της διαδικασίας ελέγχου
SIGINT 2 Ορος Διακοπή από το πληκτρολόγιο
SIGQUIT 3 Πυρήνας Κλείστε από το πληκτρολόγιο
SIGILL 4 Πυρήνας Παράνομη οδηγία
SIGABRT 6 Πυρήνας Ακύρωση σήματος από διακοπή (3)
SIGFPE 8 Πυρήνας Εξαιρέσεις κυμαινόμενου σημείου
SIGKILL 9 Ορος Σκότωσε το σήμα
SIGSEGV 11 Πυρήνας Μη έγκυρη αναφορά μνήμης
SIGPIPE 13 Ορος Σπασμένο σωλήνα: γράψτε σε σωλήνα χωρίς αναγνώστες
SIGALRM 14 Ορος Χρονοδιακόπτης από συναγερμό (2)
SIGTERM 15 Ορος Σήμα τερματισμού
SIGUSR1 30,10,16 Ορος Ορισμένο από το χρήστη σήμα 1
SIGUSR2 31,12,17 Ορος Ορισμένο από το χρήστη σήμα 2
SIGCHLD 20,17,18 Ign Το παιδί σταμάτησε ή τερμάτισε
SIGCONT 19,18,25 Συνεχίστε εάν σταματήσει
SIGSTOP 17,19,23 Να σταματήσει Διαδικασία διακοπής
SIGTSTP 18,20,24 Να σταματήσει Σταματήστε να πληκτρολογείτε στο tty
SIGTTIN 21,21,26 Να σταματήσει tty εισόδου για τη διαδικασία παρασκηνίου
SIGTTOU 22,22,27 Να σταματήσει tty εξόδου για τη διαδικασία φόντου

Τα σήματα SIGKILL και SIGSTOP δεν μπορούν να παγιδευτούν, να μπλοκαριστούν ή να αγνοηθούν.

Στη συνέχεια, τα σήματα που δεν περιλαμβάνονται στο πρότυπο POSIX.1 αλλά περιγράφονται στα SUSv2 και SUSv3 / POSIX 1003.1-2001.

Σήμα αξία Δράση Σχόλιο
SIGPOLL Ορος Συμβατό συμβάν (Sys V). Συνώνυμο του SIGIO
SIGPROF 27,27,29 Ορος Ο χρονομετρητής προφίλ έληξε
SIGSYS 12, -, 12 Πυρήνας Κακό επιχείρημα στη ρουτίνα (SVID)
SIGTRAP 5 Πυρήνας Παγίδα εντοπισμού / διακοπής
SIGURG 16,23,21 Ign Επείγουσα κατάσταση στην υποδοχή (4.2 BSD)
SIGVTALRM 26,26,28 Ορος Εικονικό ξυπνητήρι (4.2 BSD)
SIGXCPU 24,24,30 Πυρήνας Υπέρβαση χρονικού ορίου CPU (4.2 BSD)
SIGXFSZ 25,25,31 Πυρήνας Υπέρβαση του ορίου μεγέθους αρχείου (4.2 BSD)

Μέχρι και το Linux 2.2, η προεπιλεγμένη συμπεριφορά για SIGSYS , SIGXCPU , SIGXFSZ και (σε ​​αρχιτεκτονικές εκτός SPARC και MIPS) SIGBUS ήταν να τερματίσει τη διαδικασία (χωρίς κεντρική χωματερή). (Σε ορισμένες άλλες μονάδες, η προεπιλεγμένη ενέργεια για SIGXCPU και SIGXFSZ είναι να τερματίσει τη διαδικασία χωρίς κεντρική χωματερή.) Το Linux 2.4 συμμορφώνεται με τις απαιτήσεις POSIX 1003.1-2001 για αυτά τα σήματα, τερματίζοντας τη διαδικασία με μια κεντρική χωματερή.

Στη συνέχεια διάφορα άλλα σήματα.

Σήμα αξία Δράση Σχόλιο
SIGEMT 7, -, 7 Ορος
SIGSTKFLT -, 16, - Ορος Σφάλμα στοίβας στον coprocessor (δεν χρησιμοποιείται)
SIGIO 23,29,22 Ορος I / O είναι τώρα δυνατή (4.2 BSD)
SIGCLD -, -, 18 Ign Ένα συνώνυμο για το SIGCHLD
SIGPWR 29,30,19 Ορος Σφάλμα τροφοδοσίας (Σύστημα V)
SIGINFO 29, -, - Ένα συνώνυμο για το SIGPWR
SIGLOST -, -, - Ορος Το κλείδωμα αρχείου χάθηκε
SIGWINCH 28,28,20 Ign Παράθυρο αλλαγής μεγέθους παραθύρου (4.3 BSD, Sun)
ΑΣΦΑΛΕΙΑΣ -, 31, - Ορος Αχρησιμοποίητο σήμα (θα είναι SIGSYS)

(Το σήμα 29 είναι SIGINFO / SIGPWR σε ένα άλφα αλλά το SIGLOST σε ένα sparc.)

Το SIGEMT δεν έχει οριστεί στο POSIX 1003.1-2001, αλλά εμφανίζεται στις περισσότερες άλλες Unices, όπου η προεπιλεγμένη ενέργεια του είναι συνήθως να τερματίσει τη διαδικασία με μια κεντρική χωματερή.

Το SIGPWR (το οποίο δεν έχει οριστεί στο POSIX 1003.1-2001) αγνοείται συνήθως από προεπιλογή σε αυτές τις άλλες Unices όπου εμφανίζεται.

Το SIGIO (το οποίο δεν καθορίζεται στο POSIX 1003.1-2001) αγνοείται από προεπιλογή σε διάφορες άλλες μονάδες.

Μηνύματα σε πραγματικό χρόνο

Το Linux υποστηρίζει σήματα πραγματικού χρόνου όπως ορίστηκαν αρχικά στις επεκτάσεις πραγματικού χρόνου POSIX.4 (και τώρα περιλαμβάνονται στο POSIX 1003.1-2001). Το Linux υποστηρίζει 32 σήματα πραγματικού χρόνου, αριθμημένα από 32 ( SIGRTMIN ) έως 63 ( SIGRTMAX ). (Τα προγράμματα πρέπει πάντα να αναφέρονται σε σήματα σε πραγματικό χρόνο χρησιμοποιώντας τη σημείωση SIGRTMIN + n, δεδομένου ότι το εύρος των αριθμών σήματος σε πραγματικό χρόνο διαφέρει μεταξύ των Unices.)

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

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

Τα σήματα σε πραγματικό χρόνο διακρίνονται από τα εξής:

  1. Πολλαπλές περιπτώσεις σημάτων σε πραγματικό χρόνο μπορούν να τεθούν σε σειρά. Αντιθέτως, εάν παραδίδονται πολλαπλές περιπτώσεις ενός τυποποιημένου σήματος ενώ αυτό το σήμα είναι μπλοκαρισμένο, τότε μόνο μία περίπτωση βρίσκεται σε ουρά.
  2. Εάν το σήμα αποστέλλεται χρησιμοποιώντας sigqueue (2), μπορεί να αποσταλεί μια συνοδευτική τιμή (είτε ένας ακέραιος είτε ένας δείκτης) με το σήμα. Εάν η διαδικασία λήψης καθορίζει έναν χειριστή για αυτό το σήμα χρησιμοποιώντας τη σημαία SA_SIGACTION στην sigaction (2), τότε μπορεί να λάβει αυτά τα δεδομένα μέσω του πεδίου si_value της δομής siginfo_t που πέρασε ως το δεύτερο όρισμα στον χειριστή. Επιπλέον, τα πεδία si_pid και si_uid αυτής της δομής μπορούν να χρησιμοποιηθούν για να αποκτήσουν το PID και το πραγματικό αναγνωριστικό χρήστη της διαδικασίας που στέλνει το σήμα.
  3. Τα σήματα σε πραγματικό χρόνο παρέχονται με εγγυημένη σειρά. Πολλαπλά σήματα πραγματικού χρόνου του ίδιου τύπου παρέχονται με τη σειρά που έχουν σταλεί. Εάν αποστέλλονται διαφορετικά σήματα σε πραγματικό χρόνο σε μια διαδικασία, αυτά παρέχονται αρχίζοντας με το σήμα με το χαμηλότερο αριθμό. (Δηλαδή, τα σήματα χαμηλών αριθμών έχουν την υψηλότερη προτεραιότητα.)

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

Σύμφωνα με το POSIX, μια υλοποίηση θα πρέπει να επιτρέπει τουλάχιστον τα _POSIX_SIGQUEUE_MAX (32) σήματα πραγματικού χρόνου να τεθούν σε αναμονή σε μια διαδικασία. Ωστόσο, αντί να θέτει ένα όριο ανά διεργασία, το Linux επιβάλλει ένα όριο σε όλο το σύστημα στον αριθμό των σημάτων σε ουρά σε πραγματικό χρόνο για όλες τις διαδικασίες.

Αυτό το όριο μπορεί να προβληθεί (και με προνόμιο) να αλλάξει μέσω του αρχείου / proc / sys / kernel / rtsig-max . Ένα σχετικό αρχείο, / proc / sys / kernel / rtsig-max , μπορεί να χρησιμοποιηθεί για να μάθετε πόσα σήματα σε πραγματικό χρόνο βρίσκονται σήμερα στην ουρά.

ΣΥΜΜΟΡΦΩΣΗ ΣΤΗΝ

POSIX.1

Σημαντικό: Χρησιμοποιήστε την εντολή man ( % man ) για να δείτε πώς χρησιμοποιείται μια εντολή στον υπολογιστή σας.