H επικοινωνία μεταξύ διεργασιών: Σήματα

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/

2 «Μου αρέσει»