H επικοινωνία μεταξύ διεργασιών ή χαϊδευτικά IPC, είναι οι τρόποι με τους οποίους οι διεργασίες (με άλλα λόγια τα προγράμματα) μιλάνε μεταξύ τους. Στο παρόν κάτω από το καπάκι σημείωμα θα δούμε με ποιο τρόπο γίνεται αυτό. Θα μας βοηθήσει σαν γνώση για να καταλάβουμε αρκετά πράγματα. Είναι πολλά αυτά που πρέπει να πούμε και αυτό είναι το πρώτο μέρος. Δε θα μπω στα βαθιά και δε θα μιλήσω καθόλου για το προγραμματιστικό κομμάτι.
1. Σήματα
Είναι ο πιο απλός μηχανισμός. Μια διεργασία (ή το λειτουργικό) στέλνει ένα σήμα σε μια άλλη. Όλη η πληροφορία είναι ο αριθμός του σήματος. Το πρόγραμμα που τη λαμβάνει δρα ανάλογα. Αν δεν κάνει κάποια ρύθμιση ο προγραμματιστής θα συμβεί ανάλογα με τον αριθμό ένα από τα παρακάτω α. Θα την αγνοήσει, β. Θα σταματήσει να τρέχει.
Ας δούμε μερικά τέτοια σήματα. Κάθε σήμα έχει ένα συμβολικό όνομα και ένα αριθμό.
Αρ. | Σήμα | Ερμηνεία |
---|---|---|
1 | SIGHUP | Χάθηκε η σύνδεση με το τερματικό. Δες την εντολή nohup . |
2 | SIGINT | Αίτηση για τερματισμό. Στο τερματικό CtrlC. |
9 | SIGKILL | Λανθασμένος κώδικά μηχανής. Τερματισμός χωρίς κουβέντα άμεσα. Δεν μπορεί να αγνοηθεί από τον προγραμματιστή. |
10 | SIGUSR1 | Δεν έχει προκαθορισμένη λειτουργία. Συνήθως υπηρεσίες το χρησιμοποιούν για ειδικές δουλείες |
11 | SIGUSR2 | Μια από τα παραπάνω |
15 | SIGTERM | Ευγενική αίτηση για τερματισμό. Το σύνηθες σήμα που στέλνει η εντολή kill .Κάθε σωστό πρόγραμμά όταν λάβει το σήμα τερματίζει ομαλά. |
20 | SIGTRAP | Αίτηση για διακοπή. Υπάρχει και το SIGSTOP(19) Στο τερματικό CtrlZ |
3 | SIGQUIT | Αίτηση για διακοπή. Στο τερματικό Ctrl\. Επιπλέον φτιάχνει στον δίσκο ένα αρχείο core dump με τα περιεχόμενά της μνήμης για αποσφαλμάτωση |
Υπάρχουν και άλλα σήματα όταν συμβεί πρόβλημα στο υλικό, διαίρεση με το μηδέν σε κάποιες αρχιτεκτονικές, πρόσβαση σε απαγορευμένη θέση μνήμης κλπ
Όταν θέλουμε να σταματήσει να τρέχει κάποιο πρόγραμμα θα του ρίξουμε πρώτα ένα SIGTERM
και αν μας αγνοήσει μετά από λίγο θα του στείλουμε ένα SIGKILL
. Η εντολή kill
μπορεί να στείλει ένα σήμα σε μια διεργασία. Οι εντολές bg
και fg
θα στείλουν αντίστοιχα σήματα. Η εντολή nohup
θα κάνει ένα πρόγραμμα να μη λάβει το σήμα SIGHUP
και θα συνεχίσει να τρέχει μετά που θα κλείσει το τερματικό.
Αν και θα μπορούσε να γράψει κανείς σελίδες επί σελίδων για τα σήματα, αυτά είναι τα βασικά. Ελπίζω να βοήθησε στο να καταλάβεις τι συμβαίνει όταν πατάς CtrlC, ειδικά αν το πρόγραμμα μουλαρώνει και σε αγνοεί. Ή γιατί χρησιμοποιείς την εντολή kill
για να κάνεις μια υπηρεσία να διαβάσει ξανά τις ρυθμίσεις της. Ή τον σωστό τρόπο για να τερματίσεις ένα πρόγραμμα.
Τα σήματα είναι μαζί μας από το πρώτο UNIX. Αν και αρχαϊκά και περιορισμένα σαν μηχανισμός επικοινωνίας παραμένουν σήμερα χρήσιμα και είναι ένας βασικός μηχανισμός επικοινωνίας. Ναι, σε πρώτο άκουσμα το να πατάς CtrlC δε μοιάζει με επικοινωνία, αλλά για σκεφτείτε το λιγάκι.
Αυτά τα βασικά και αρκετά θεωρητικά για σήμερα. Θα τα ξαναπούμε με άλλους μηχανισμούς σύντομα.
Οι εικόνες είναι πνευματική ιδιοκτησία του Daniel Stori.
http://turnoff.us/