Η βασική εντολή διαχείρισης των διεργασιών είναι η ps (process status). Αν την εκτελέσουμε έχουμε:


Παρατηρούμε ότι εμφανίζονται δύο μόνο διεργασίες ο φλοιός (Shell) bash και η ίδια εντολή ps.

Αναλυτικά οι πληροφορίες που εμφανίζονται ανά στήλη είναι:

PID – Η μοναδική ταυτότητα της διεργασίας.

TTY – Το τερματικό που χρησιμοποιεί η διεργασία (εδώ το τερματικό μας).

TIME- Το ποσό χρόνου που απασχόλησε τον επεξεργαστή (CPU).

CMD- Το όνομα της εντολής που δημιούργησε τη διεργασία.

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

Παράμετρος

 Σημασία – τι εμφανίζεται

-l (long)

Περισσότερες πληροφορίες για κάθε διεργασία

-f

Πλήρης λίστα

-x

Τις διεργασίες που σας ανήκουν

 

Συνήθως χρησιμοποιούμε την εντολή ps -ux για να δούμε τις δικές μας διεργασίες:

Όπως:


Εικόνα 4.5.1 - Διεργασίες του χρήστη user

Επίσης την εντολή psaux για να δούμε τις συνολικές διεργασίες του συστήματος.


Εικόνα 4.5.2. Συνολικές διεργασίες του συστήματος

Παρατηρούμε ότι πρώτες εμφανίζονται οι διεργασίες του συστήματος και στο τέλος υπάρχουν οι δικές μας (εδώ user).

Οι λίστες που παίρνουμε από την ps είναι στατικές με την έννοια ότι αποτελούν την εικόνα των διεργασιών τη στιγμή που χρησιμοποιήσαμε την ps. Αν θέλουμε να παρακολουθήσουμε τις διεργασίες που εκτελούνται σe πραγματικό χρόνο (on-line) θα πρέπει να χρησιμοποιήσουμε την εντολή top.


Εικόνα 4.5.3 - Αποτελέσματα της εντολής top

Διεργασία γονέας

Μια διεργασία μπορεί να δημιουργεί άλλες διεργασίες. Στην περίπτωση αυτή η αρχική διεργασία ονομάζεται διεργασία γονέας ή γονική διεργασία.


Ενδιαφέρον εδώ είναι ότι παρουσιάζεται επιπλέον η ταυτότητα του χρήστη (UID) και η ταυτότητα της γονικής διεργασίας (PPID- Parent ID).

Παρατηρούμε ότι το PPID της ps (15192) είναι ίδιο με το το PID της bash (15192). Αυτό πρακτικά σημαίνει ότι η διεργασία bash είναι γονέας της ps . Αντίστοιχα μπορούμε να πούμε ότι η διεργασία ps είναι παιδί (child) της bash.

Υπάρχει μια αρχική διεργασία από την οποία ξεκινάνε όλες οι άλλες αυτή δημιουργείται από την εκτέλεση της εντολής init στο Λ.Σ του συστήματός μας.

Λειτουργίες πάνω στις διεργασίες

Το Λ.Σ είναι εκείνο που διαχειρίζεται διεργασίες των χρηστών του συστήματος καθώς και εκείνες που δημιουργεί το ίδιο το σύστημα. Ορισμένες από τις λειτουργίες του Λ.Σ που αφορούν τις διεργασίες είναι:

Δημιουργία μιας διεργασίας: Μια διεργασία δημιουργείται είτε από το σύστημα είτε από την τους χρήστες με την εκκίνηση προγραμμάτων.

Αναστολή διεργασίας: Το Λ.Σ ανάλογα με το φόρτο του συστήματος μπορεί να προχωρήσει στην αναστολή λειτουργίας μιας διεργασίας.

Επαναφορά μιας διεργασίας: Το Λ.Σ μπορεί να επαναφέρει μια διεργασία που είχε ανασταλεί η λειτουργία της και να συνεχίσει την εκτέλεσή της.

Αλλαγή προτεραιότητας μιας διεργασίας: Το Λ.Σ δίνει στις διεργασίες μια προκαθορισμένη προτεραιότητα (priority) εκτέλεσης. Η προτεραιότητα αυτή μπορεί να αλλάξει έιτε από το σύστημα είτε από τον χρήστη.

Μεταφορά μιας διεργασίας για εκτέλεση στο παρασκήνιο

Οι διεργασίες που δημιουργεί ένας χρήστης εκτελούνται στο προσκήνιο (foreground) , δηλαδή απασχολούν το τρέχον παράθυρο (τερματικό) και ο χρήστης δεν μπορεί να εκτελέσει άλλη εντολή.

Παράδειγμα: Εκτελούμε την εντολή:

sleep 10

Η εντολή αυτή "κοιμίζει" την εκτέλεση της για χρόνο ίσο με 10 δευτερόλεπτα. Σε αυτά τα 10" δεν μπορούμε να δώσουμε άλλη εντολή (δεν εμφανίζεται η προτροπή του συστήματος).

Αν δώσουμε όμως την εντολή:

sleep 100 &

παρατηρούμε ότι η προτροπή εμφανίζεται αμέσως. Η διεργασία sleep συνεχίζει να εκτελείται όπως μπορούμε να διαπιστώσουμε με την εντολή ps.


Εικόνα 4.5.4 - Εκτέλεση διεργασίας στο παρασκήνιο

Ο χαρακτήρας "&" στο τέλος της εντολής sleep 100 & προκαλεί τη μεταφορά και εκτέλεση της εντολής στο παρασκήνιο (background). Δηλαδή εκτελείται χωρίς να απασχολεί το τρέχον τερματικό. Ενδιαφέρον έχει ότι μόλις μια εργασία μεταφερθεί στο παρασκήνιο το σύστημα εμφανίζει το PID της (εδώ είναι το 3002).

Τερματισμός διεργασιών

Ο τερματισμός διεργασιών γίνεται με σήματα (signals). Τα σήματα είναι "εντολές" του Λ.Σ προς τις διεργασίες να εκτελέσουν μια εργασία (συνήθως να τερματίσουν τη λειτουργία τους). Τα σήματα που χρησιμοποιούνται για τον τερματισμό μιας διεργασίας είναι το Sigterm και το Sigkill.

Ο χρήστης μπορεί να τερματίσει (kill) Μια διεργασία αρκεί να γνωρίζει τον αριθμό ταυτότητας της PID. Το PID βρίσκεται με τη χρήση της εντολής ps.

Για παράδειγμα αν θέλουμε να τερματίσουμε τη διεργασία με PID 567, μπορούμε να χρησιμοποιήσουμε την εντολή:

kill 567

Η εντολή αυτή θα στείλει το σήμα Sigterm στη διεργασία και θα "κλείσει" το τερματικό της προκαλώντας το τερματισμό της. Αυτός είναι ο ποιο σωστός τρόπος τερματισμού αλλά όχι ο ποιο αποτελεσματικός. Αν η διεργασία δεν τερματίσει τότε χρησιμοποιούμε την εντολή:

kill -9 567

Η εντολή αυτή θα στείλει το σήμα Sigkill στη διεργασία προκαλώντας τον άμεσο και αναγκαστικό τερματισμό της.