Εργασίες στο προσκήνιο, παρασκήνιο

Εικόνα: markos
Submitted by markos on Κυρ, 04/03/2007 - 21:32

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

Μερικά προγράμματα όμως είναι σχεδιασμένα να τρέχουν συνεχώς και δεν αναμένεται ο τερματισμός τους, όπως, για παράδειγμα, οι διακομιστές αλληλογραφίας (mail servers) ή προγράμματα που έχουν σχεδιαστεί για πολύωρη επεξεργασία δεδομένων (π.χ. προσομοιώσεις φυσικών μοντέλων (physical modelling simulations). Η δέσμευση ενός τερματικού για την παρακολούθηση κάθε τέτοιου προγράμματος είναι περιττό φόρτο για το σύστημα, καθώς μπορεί να υπάρχουν πολλές τέτοιες διεργασίες που τρέχουν ανά πάσα στιγμή. Θα πρέπει λοιπόν να επινοηθεί ένας τρόπος να τρέχουν οι διεργασίες αυτές στο περιθώριο ή στο παρασκήνιο (background) χωρίς να είναι εμφανής η λειτουργία τους, αλλά και χωρίς φυσικά αυτό να σημαίνει ότι θα χάνεται η επικοινωνία.
Ο τρόπος με το οποίο επιτυγχάνεται η εκτέλεση ενός προγράμματος στο παρασκήνιο είναι με τη χρήση του τελεστή &.

$ command &
[1] 3465
$

Η μορφή αυτή θα εκτελέσει την εντολή command ως εργασία παρασκηνίου με το διακριτικό [1]. Το διακριτικό είναι απαραίτητο γιατί μπορούμε να έχουμε περισσότερες από μία εργασίες παρασκηνίου στο ίδιο κέλυφος και μπορεί να θελήσουμε να φέρουμε μία από αυτές στο προσκήνιο ξανά. Ο δεύτερος αριθμός είναι ο αριθμός ταυτότητας της διεργασίας (process id – pid). Στις διεργασίες θα αναφερθούμε αναλυτικά σε ερχόμενο κεφάλαιο.

Πολλές φορές θα δούμε τον τελεστή να χρησιμοποιείται με δύο εντολές

$ command1 & command2

Στην περίπτωση αυτή, η πρώτη εντολή θα εκτελεστεί στο παρασκήνιο και η δεύτερη στο προσκήνιο.
Μπορούμε να δούμε τις υπάρχουσες εργασίες στο παρασκήνιο με την εντολή jobs. Εκτελώντας την εντολή, θα μας επιστρέψει μια λίστα με τις εργασίες, τα διακριτικά τους, τα ονόματά τους, και την κατάστασή τους δηλαδή αν είναι σε εξέλιξη ή σταματημένες:

$ command1 &
[1] 3465
$ command2 &
[2] 3466
$ jobs
[1]-  Running                 command1 &
[2]+  Running                 command2 &

Αν για κάποιο λόγο θέλουμε να επαναφέρουμε μία από τις εργασίες στο προσκήνιο αρκεί να εκτελέσουμε την εντολή fg (foreground) με το διακριτικό της εργασίας.

$ fg 1
command1

Αντίστροφα, μπορεί να επιθυμούμε να στείλουμε την τρέχουσα διεργασία στο παρασκήνιο, γιατί πιθανώς να περιμένει κάποια πληροφορία την οποία δεν έχουμε εύκαιρη και πρέπει να τρέξουμε κάποιο άλλο πρόγραμμα. Αυτό γίνεται με το συνδυασμό πλήκτρων [CTRL]-Ζ. Η διεργασία που βρίσκεται στο προσκήνιο τίθεται σε νάρκη και επιστρέφουμε στην προτροπή κελύφους. Έπειτα μπορούμε να ξαναφέρουμε την διεργασία στο προσκήνιο με την εντολή fg, ή να τη στείλουμε στο παρασκήνιο με την εντολή bg (background).

$ command
[CTRL-Z]
[1]+  Stopped                 command
$ bg
[1]+ command &

Όταν μια εργασία που βρίσκεται στο παρασκήνιο τερματίσει, θα εμφανιστεί το ακόλουθο μήνυμα στο κέλυφος:

[1]+  Done                    command

0
Your rating: None