Εισαγωγή στο Λειτουργικό Σύστημα UNIX & GNU/Linux Διαχεiριση διεργασιών (Job control)

Διαχεiριση Διεργασιων (Job Control) Foreground & Background

Το Λ.Σ UNIX είναι σχεδιασμένο με το σκεπτικό ότι ο υπολογιστής πρέπει να δίνει την δυνατότητα σε διαφορετικούς χρήστες να μπορούν ταυτόχρονα να χρησιμοποιούν τόσο την επεξεργαστική του ισχύ όσο και τα αποθηκευτικά μέσα που διαθέτει, ταυτόχρονα (multiuser, multitasking). Τα shells που υπάρχουν στο UNIX ακολουθούν αυτή τη λογική και δίνουν την δυνατότητα στον χρήστη να μπορεί να εκτελεί πολλαπλές διεργασίες χωρίς να χρειάζεται για κάθε μια από αυτή και ένα διαφορετικό shell. ’λλωστε, το shell θυμίζουμε ότι έχει σαν σκοπό τη διασύνδεση του υπολογιστή με τον χρήστη και αν οι δυνατότητές του περιορίζονταν στο να δίνει προς εκτέλεση μια εντολή και κατόπιν να περιμένει να τελειώσει για να μπορέσει να δεχτεί την επόμενη, τότε η αποδοτικότητα ως προς το χρόνο θα ήταν πολύ χαμηλή.

Εδώ εμφανίζεται η έννοια του background και του foreground. Οι έννοιες αυτές είναι λίγο αόριστες και θα επιχειρήσουμε να δώσουμε δύο πολύ γενικούς ορισμούς. Σαν foreground εννοούμε την κατάσταση στην οποία οι εντολές και τα προγράμματα εκτελούνται και βρίσκονται σε άμεση αλληλεπίδραση με τον χρήστη. Σαν background εννοούμε την κατάσταση στην οποία οι διεργασίες εκτελούνται χωρίς να αλληλεπίδρούν με τον χρήστη. Για να γίνει πιο κατανοητό, ας θεωρήσουμε το ακόλουθο παράδειγμα: ένας χρήστης θέλει να εκτελέσει ένα αρχείο εντολών το οποίο αναζητεί πάνω στο δίσκο όλα τα αρχεία με μέγεθος μεγαλύτερο από 1 Kb. Αυτή είναι μια διεργασία που κατά πασα πιθανότητα θα αργίσει να τελειώσει. Στο μεταξύ ο χρήστης πρέπει να περιμένει τον τερματισμό της προκειμένου να εκτελέσει κάποια άλλη εντολή από το ίδιο shell. Εναλλακτικά, μπορεί να αναθέσει, να "στείλει" ΄οπως λέμε, την διεργασία αυτη στο background και όσο αυτή εκτελείται, το shell να είναι σε κατάσταση αναμονής για να δεχτεί και άλλες εντολές. Ένα άλλο πράδειγμα, θα ήταν η περίπτωση στην οποία ένας χρήστης θέλει για όσο χρονικό διάστημα είναι συνδεδεμένος με τον υπολογιστή να εκτελείται ένα πρόγραμμα που θα του αναφέρει ποιο άλλοι χρήστες είναι συνδεδεμένοι ταυτόχρονα με αυτον στον ίδιο υπολογιστή , ή αν κάποιος χρήστης αποσυνδέθηκε κλπ.

Για να γίνουν δυνατά όλα τα παραπάνω, πρέπει ή για κάθε μια διεργασία να ξεκινάει ο χρήστης ένα διαφορετικό shell για να μπορέσει να ζητήσει την εκτέλεση των εντολών αυτών, ή να μπορεί από το ίδιο shell να στείλει στο background κάποιες από αυτές και να έχει την δυνατότητα να συνεχίσει την δουλειά του όσο αυτές εκτελούνται.

Ο τρόπος με τον οποίο το shell καταλαβαίνει ότι μια διεργασία πρέπει να εκτελεστεί στο background, είναι να δώσουμε στο τέλος της εντολής το σύμβολο &.

Για παράδειγμα, αν θέλουμε να εκτελέσουμε το πρόγραμμα με όνομα pi_evaluation το οποίο υπολογίζει την τιμή του αριθμού π με 1.000.000.000.000 δεκαδικά ψηφεία, μπορούμε να το στείλουμε στο background ώς εξής:

# pi_evaluation &

Αν έχουμε ήδη ξεκινήσει μια διεργασία και θέλουμε να την στείλουμε στο background γιατί στο μεταξύ χρειάζεται να χρησιμοποιήσουμε το shell, τότε μπορούμε να χρησιμοποιήσουμε το πλήκτρο Z σε συνδιασμό με το πλήκτρο Control (Control-Z και συμβολικά ^Z).

Για να δούμε ποιες διεργασίες έχουμε στείλει στο background από το shell στον οποίο εργαζόμαστε, χρησιμοποιούμε την εντολή jobs:

# jobs

[1] + Running ls -lR / 2 >& /dev/null
[2] - Running iostat -k 1

Αν θέλουμε να την επαναφέρουμε στο foreground, μπορούμε να χρησιμοποιήσουμε την εντολή fg με παράμετρο τον α/α της διεργασίας.

# fg %2