Το 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 ήταν να τερματίσει τη διαδικασία (χωρίς κεντρική χωματερή). (Σε μερικές άλλες Unices η προεπιλεγμένη ενέργεια για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) τυπικά αγνοείται από προεπιλογή σε αυτές τις άλλες μονάδες όπου εμφανίζεται.
SIGIO (που δεν καθορίζεται στο POSIX 1003.1-2001) αγνοείται από προεπιλογή σε διάφορες άλλες μονάδες.
Μηνύματα σε πραγματικό χρόνο
Το Linux υποστηρίζει σήματα πραγματικού χρόνου όπως ορίστηκαν αρχικά στις επεκτάσεις πραγματικού χρόνου POSIX.4 (και τώρα περιλαμβάνονται στο POSIX 1003.1-2001). Το Linux υποστηρίζει 32 σήματα πραγματικού χρόνου, αριθμημένα από 32 (SIGRTMIN) έως 63 (SIGRTMAX). (Τα προγράμματα θα πρέπει πάντα να αναφέρονται σε σήματα σε πραγματικό χρόνο χρησιμοποιώντας σημειώσειςSIGRTMIN+ n, δεδομένου ότι το εύρος αριθμών σήματος σε πραγματικό χρόνο διαφέρει μεταξύ των μονάδων.)
Σε αντίθεση με τα τυπικά σήματα, τα σήματα σε πραγματικό χρόνο δεν έχουν προκαθορισμένες σημασίες: ολόκληρο το σύνολο σημάτων σε πραγματικό χρόνο μπορεί να χρησιμοποιηθεί για σκοπούς καθορισμένους από την εφαρμογή. (Σημειώστε, ωστόσο, ότι η εφαρμογή LinuxThreads χρησιμοποιεί τα τρία πρώτα σήματα πραγματικού χρόνου.)
Η προεπιλεγμένη ενέργεια για ένα μη χειρισμένο σήμα σε πραγματικό χρόνο είναι να τερματίσει τη διαδικασία λήψης.
Τα σήματα σε πραγματικό χρόνο διακρίνονται από τα εξής:
- Πολλαπλές περιπτώσεις σημάτων σε πραγματικό χρόνο μπορούν να τεθούν σε σειρά. Αντιθέτως, εάν παραδίδονται πολλαπλές περιπτώσεις ενός τυποποιημένου σήματος ενώ αυτό το σήμα είναι μπλοκαρισμένο, τότε μόνο μία περίπτωση βρίσκεται σε ουρά.
- Εάν το σήμα αποστέλλεται χρησιμοποιώνταςsigqueue(2), μια συνοδευτική τιμή (είτε ένας ακέραιος είτε ένας δείκτης) μπορεί να σταλεί με το σήμα. Εάν η διαδικασία λήψης δημιουργεί χειριστή για αυτό το σήμα χρησιμοποιώντας τοSA_SIGACTION σημαία στοσιγουριά(2) τότε μπορεί να λάβει αυτά τα δεδομένα μέσω του si_value τομέα της siginfo_t δομή δόθηκε ως το δεύτερο επιχείρημα στον χειριστή. Επιπλέον, το si_pid και si_uid πεδία αυτής της δομής μπορούν να χρησιμοποιηθούν για να αποκτήσουν το PID και το πραγματικό αναγνωριστικό χρήστη της διαδικασίας που στέλνει το σήμα.
- Τα σήματα σε πραγματικό χρόνο παρέχονται με εγγυημένη σειρά. Πολλαπλά σήματα πραγματικού χρόνου του ίδιου τύπου παρέχονται με τη σειρά που έχουν σταλεί. Εάν αποστέλλονται διαφορετικά σήματα σε πραγματικό χρόνο σε μια διαδικασία, αυτά παρέχονται αρχίζοντας με το σήμα με το χαμηλότερο αριθμό. (Δηλαδή, τα σήματα χαμηλού αριθμού έχουν την υψηλότερη προτεραιότητα.)
Εάν εκκρεμούν και τα δύο στάνταρ και τα σήματα σε πραγματικό χρόνο για μια διαδικασία, το POSIX το αφήνει απροσδιόριστο το οποίο παραδίδεται πρώτα. Το Linux, όπως πολλές άλλες εφαρμογές, δίνει προτεραιότητα σε τυποποιημένα σήματα σε αυτή την περίπτωση.
Σύμφωνα με το POSIX, μια υλοποίηση θα πρέπει να επιτρέπει τουλάχιστον τα _POSIX_SIGQUEUE_MAX (32) σήματα πραγματικού χρόνου να τεθούν σε αναμονή σε μια διαδικασία. Ωστόσο, αντί να θέτει ένα όριο ανά διεργασία, το Linux επιβάλλει ένα όριο σε όλο το σύστημα στον αριθμό των σημάτων σε ουρά σε πραγματικό χρόνο για όλες τις διαδικασίες.
Αυτό το όριο μπορεί να προβληθεί (και με προνόμιο) αλλάξει μέσω του / proc / sys / kernel / rtsig-max αρχείο. Ένα σχετικό αρχείο, / proc / sys / kernel / rtsig-max , μπορεί να χρησιμοποιηθεί για να μάθετε πόσα σήματα σε πραγματικό χρόνο βρίσκονται σήμερα στην ουρά.
ΣΥΜΜΟΡΦΩΣΗ ΣΤΗΝ
POSIX.1
Σπουδαίος: Χρησιμοποιήστε το άνδρας εντολή ( % άνδρας ) για να δείτε πώς χρησιμοποιείται μια εντολή στον υπολογιστή σας.