Πώς να εκτελέσετε και να ελέγξετε τις διεργασίες παρασκηνίου στο Linux

Χρησιμοποιήστε το κέλυφος Bash στο Linux για να διαχειριστείτε τις διαδικασίες στο προσκήνιο και στο παρασκήνιο. Μπορείτε να χρησιμοποιήσετε τις λειτουργίες και τα σήματα ελέγχου εργασιών του Bash για να σας δώσουν μεγαλύτερη ευελιξία στον τρόπο εκτέλεσης των εντολών. Σας δείχνουμε πώς.

Όλα για τις διαδικασίες

Κάθε φορά που ένα πρόγραμμα εκτελείται σε λειτουργικό σύστημα Linux ή τύπου Unix, ξεκινά μια διαδικασία. «Διαδικασία» είναι το όνομα για την εσωτερική αναπαράσταση του προγράμματος εκτέλεσης στη μνήμη του υπολογιστή. Υπάρχει μια διαδικασία για κάθε ενεργό πρόγραμμα. Στην πραγματικότητα, υπάρχει μια διαδικασία για σχεδόν όλα όσα εκτελούνται στον υπολογιστή σας. Αυτό περιλαμβάνει τα στοιχεία του σας γραφικό περιβάλλον επιφάνειας εργασίας (ΓΔΕ) όπως ΝΑΝΟΣ ή KDE, και σύστημα δαίμονες που κυκλοφορούν κατά την εκκίνηση.

Γιατί σχεδόν όλα όσα τρέχουν; Λοιπόν, Bash ενσωματωμένα, όπως CD, pwd, και ψευδώνυμο δεν χρειάζεται να ξεκινήσει μια διαδικασία (ή να “αναπαράγεται”) όταν εκτελούνται. Το Bash εκτελεί αυτές τις εντολές εντός της παρουσίας του κελύφους Bash που εκτελείται στο παράθυρο του τερματικού σας. Αυτές οι εντολές είναι γρήγορες ακριβώς επειδή δεν χρειάζεται να έχουν ξεκινήσει μια διαδικασία για να εκτελεστούν. (Μπορείτε να πληκτρολογήσετε βοήθεια σε ένα παράθυρο τερματικού για να δείτε τη λίστα των ενσωματωμένων του Bash.)

Οι διεργασίες μπορεί να εκτελούνται στο προσκήνιο, οπότε αναλαμβάνουν το τερματικό σας μέχρι να ολοκληρωθούν ή μπορούν να εκτελεστούν στο παρασκήνιο. Οι διεργασίες που εκτελούνται στο παρασκήνιο δεν κυριαρχούν στο παράθυρο του τερματικού και μπορείτε να συνεχίσετε να εργάζεστε σε αυτό. Ή τουλάχιστον, δεν κυριαρχούν στο παράθυρο του τερματικού εάν δεν παράγουν έξοδο οθόνης.

Ένα ακατάστατο παράδειγμα

Θα ξεκινήσουμε ένα απλό ping ίχνος τρεξίματος. Θα κάνουμε ping στον τομέα How-To Geek. Αυτό θα εκτελεστεί ως διαδικασία προσκηνίου.

ping www.wdzwdz.com

Λαμβάνουμε τα αναμενόμενα αποτελέσματα, κάνοντας κύλιση προς τα κάτω στο παράθυρο του τερματικού. Δεν μπορούμε να κάνουμε τίποτα άλλο στο παράθυρο του τερματικού ενώ εκτελείται το ping. Για να τερματίσετε την εντολή πατήστε Ctrl+C.

Ctrl+C

Το ορατό αποτέλεσμα του Ctrl+C επισημαίνεται στο στιγμιότυπο οθόνης. Το ping δίνει μια σύντομη περίληψη και μετά σταματά.

Ας το επαναλάβουμε. Αλλά αυτή τη φορά θα πατήσουμε Ctrl+Z αντί για Ctrl+C. Η εργασία δεν θα τερματιστεί. Θα γίνει μια εργασία παρασκηνίου. Παίρνουμε τον έλεγχο του παραθύρου του τερματικού που μας επιστράφηκε.

ping www.wdzwdz.com
Ctrl+Z

Το ορατό αποτέλεσμα του πατήματος Ctrl+Z επισημαίνεται στο στιγμιότυπο οθόνης.

Αυτή τη φορά μας λένε ότι η διαδικασία έχει σταματήσει. Το σταμάτησε δεν σημαίνει τερματίστηκε. Είναι σαν ένα αυτοκίνητο σε πινακίδα στοπ. Δεν το έχουμε ξεσκαρτάρει και δεν το πετάξουμε. Είναι ακόμα στο δρόμο, ακίνητο, περιμένει να πάει. Η διαδικασία είναι πλέον μια εργασία παρασκηνίου.

  Πώς να παίξετε το Little Nightmares στο Linux

Η εντολή εργασιών θα απαριθμήσει τις θέσεις εργασίας που έχουν ξεκινήσει στην τρέχουσα περίοδο λειτουργίας τερματικού. Και επειδή οι εργασίες είναι (αναπόφευκτα) διαδικασίες, μπορούμε επίσης να χρησιμοποιήσουμε την εντολή ps για να τις δούμε. Ας χρησιμοποιήσουμε και τις δύο εντολές και ας συγκρίνουμε τις εξόδους τους. Θα χρησιμοποιήσουμε την επιλογή T (τερματικό) για να παραθέσουμε μόνο τις διεργασίες που εκτελούνται σε αυτό το παράθυρο τερματικού. Σημειώστε ότι δεν χρειάζεται να χρησιμοποιήσετε παύλα – με την επιλογή T.

jobs
ps T

Η εντολή jobs μας λέει:

[1]: Ο αριθμός σε αγκύλες είναι ο αριθμός εργασίας. Μπορούμε να το χρησιμοποιήσουμε για να αναφερθούμε στην εργασία όταν πρέπει να την ελέγξουμε με εντολές ελέγχου εργασιών.
+: Το σύμβολο συν + δείχνει ότι αυτή είναι η εργασία που θα πραγματοποιηθεί εάν χρησιμοποιήσουμε μια εντολή ελέγχου εργασίας χωρίς συγκεκριμένο αριθμό εργασίας. Ονομάζεται η προεπιλεγμένη εργασία. Η προεπιλεγμένη εργασία είναι πάντα αυτή που προστέθηκε πιο πρόσφατα στη λίστα εργασιών.
Σταμάτησε: Η διαδικασία δεν εκτελείται.
ping www.wdzwdz.com: Η γραμμή εντολών που ξεκίνησε τη διαδικασία.

Η εντολή ps μας λέει:

PID: Το αναγνωριστικό διεργασίας της διαδικασίας. Κάθε διαδικασία έχει ένα μοναδικό αναγνωριστικό.
TTY: Ο ψευδο-τηλέτυπος (τερματικό παράθυρο) από τον οποίο εκτελέστηκε η διαδικασία.
STAT: Η κατάσταση της διαδικασίας.
TIME: Η ποσότητα του χρόνου CPU που καταναλώνεται από τη διαδικασία.
ΕΝΤΟΛΗ: Η εντολή που ξεκίνησε τη διαδικασία.

Αυτές είναι κοινές τιμές για τη στήλη STAT:

Δ: Αδιάκοπος ύπνος. Η διαδικασία βρίσκεται σε κατάσταση αναμονής, συνήθως σε αναμονή για είσοδο ή έξοδο και δεν μπορεί να διακοπεί.
Ι: Αδράνεια.
Ε: Τρέξιμο.
Α: Διακοπτόμενος ύπνος.
T: Σταμάτησε από ένα σήμα ελέγχου εργασίας.
Ζ: Μια διαδικασία ζόμπι. Η διαδικασία έχει τερματιστεί, αλλά δεν έχει «καθαριστεί» από τη μητρική της διαδικασία.

Η τιμή στη στήλη STAT μπορεί να ακολουθηθεί από έναν από αυτούς τους επιπλέον δείκτες:

<: high-priority="" task="" nice="" to="" other="" processes="" n:="" low-priority="" l:="" process="" has="" pages="" locked="" into="" memory="" used="" by="" real-time="" s:="" a="" session="" leader.="" leader="" is="" that="" launched="" groups.="" shell="" multi-thread="" process.="" foreground="">Μπορούμε να δούμε ότι το Bash έχει μια κατάσταση Ss. Το κεφαλαίο “S” μας λέει ότι το κέλυφος του Bash κοιμάται και ότι διακόπτεται. Μόλις το χρειαστούμε, θα ανταποκριθεί. Το πεζό “s” μας λέει ότι το κέλυφος είναι ένας οδηγός συνεδρίας.

Η εντολή ping έχει κατάσταση T. Αυτό μας λέει ότι το ping έχει σταματήσει από ένα σήμα ελέγχου εργασίας. Σε αυτό το παράδειγμα, αυτό ήταν το Ctrl+Z που χρησιμοποιήσαμε για να το βάλουμε στο παρασκήνιο.

Η εντολή ps T έχει μια κατάσταση R, που σημαίνει εκτέλεση. Το + υποδηλώνει ότι αυτή η διαδικασία είναι μέλος της ομάδας προσκηνίου. Άρα η εντολή ps T εκτελείται στο προσκήνιο.

Η εντολή bg

Η εντολή bg χρησιμοποιείται για να συνεχίσει μια διαδικασία παρασκηνίου. Μπορεί να χρησιμοποιηθεί με ή χωρίς αριθμό εργασίας. Εάν το χρησιμοποιείτε χωρίς αριθμό εργασίας, η προεπιλεγμένη εργασία εμφανίζεται στο προσκήνιο. Η διαδικασία εξακολουθεί να εκτελείται στο παρασκήνιο. Δεν μπορείτε να στείλετε καμία εισαγωγή σε αυτό.

Εάν εκδώσουμε την εντολή bg, θα συνεχίσουμε την εντολή ping:

bg

Η εντολή ping συνεχίζεται και βλέπουμε ξανά την έξοδο κύλισης στο παράθυρο του τερματικού. Εμφανίζεται για εσάς το όνομα της εντολής που έχει επανεκκινήσει. Αυτό επισημαίνεται στο στιγμιότυπο οθόνης.

  Πώς να παίξετε παιχνίδια Sega στο Linux χρησιμοποιώντας το Gens

Αλλά έχουμε ένα πρόβλημα. Η εργασία εκτελείται στο παρασκήνιο και δεν δέχεται είσοδο. Πώς θα το σταματήσουμε λοιπόν; Τα Ctrl+C δεν κάνουν τίποτα. Μπορούμε να το δούμε όταν το πληκτρολογούμε, αλλά η εργασία στο παρασκήνιο δεν δέχεται αυτές τις πληκτρολογήσεις, οπότε συνεχίζει να χτυπά ευχάριστα.

Στην πραγματικότητα, βρισκόμαστε τώρα σε μια περίεργη λειτουργία μεικτής. Μπορούμε να πληκτρολογήσουμε στο παράθυρο του τερματικού, αλλά αυτό που πληκτρολογούμε απομακρύνεται γρήγορα από την έξοδο κύλισης από την εντολή ping. Οτιδήποτε πληκτρολογούμε ισχύει στο προηγούμενο.

Για να σταματήσουμε την εργασία στο παρασκήνιο πρέπει να την φέρουμε στο προσκήνιο και μετά να τη σταματήσουμε.

Η εντολή fg

Η εντολή fg θα φέρει μια εργασία παρασκηνίου στο προσκήνιο. Ακριβώς όπως η εντολή bg, μπορεί να χρησιμοποιηθεί με ή χωρίς αριθμό εργασίας. Η χρήση του με έναν αριθμό εργασίας σημαίνει ότι θα λειτουργήσει σε μια συγκεκριμένη εργασία. Εάν χρησιμοποιείται χωρίς αριθμό εργασίας, χρησιμοποιείται η τελευταία εντολή που στάλθηκε στο παρασκήνιο.

Αν πληκτρολογήσουμε fg η εντολή ping μας θα εμφανιστεί στο προσκήνιο. Οι χαρακτήρες που πληκτρολογούμε αναμιγνύονται με την έξοδο από την εντολή ping, αλλά λειτουργούν από το κέλυφος σαν να είχαν εισαχθεί στη γραμμή εντολών ως συνήθως. Και στην πραγματικότητα, από τη σκοπιά του κελύφους Bash, αυτό ακριβώς έχει συμβεί.

fg

Και τώρα που έχουμε την εντολή ping να εκτελείται ξανά στο προσκήνιο, μπορούμε να χρησιμοποιήσουμε Ctrl+C για να την σκοτώσει.

Ctrl+C

Πρέπει να στείλουμε τα σωστά σήματα

Δεν ήταν ακριβώς όμορφο. Προφανώς η εκτέλεση μιας διεργασίας στο παρασκήνιο λειτουργεί καλύτερα όταν η διαδικασία δεν παράγει έξοδο και δεν απαιτεί είσοδο.

Αλλά, ακατάστατο ή όχι, το παράδειγμά μας πέτυχε:

Βάζοντας μια διαδικασία στο παρασκήνιο.
Επαναφορά της διαδικασίας σε κατάσταση λειτουργίας στο παρασκήνιο.
Επαναφορά της διαδικασίας στο προσκήνιο.
Τερματισμός της διαδικασίας.

Όταν χρησιμοποιείτε Ctrl+C και Ctrl+Z, στέλνετε σήματα στη διαδικασία. Αυτά είναι σύντομους τρόπους χρήση της εντολής kill. Υπάρχουν 64 διαφορετικά σήματα που σκοτώνει μπορεί να στείλει. Χρησιμοποιήστε kill -l στη γραμμή εντολών για να τα καταχωρήσετε. Το kill δεν είναι η μόνη πηγή αυτών των σημάτων. Μερικά από αυτά αυξάνονται αυτόματα από άλλες διεργασίες εντός του συστήματος

Εδώ είναι μερικά από τα κοινά χρησιμοποιούμενα.

SIGHUP: Σήμα 1. Αποστέλλεται αυτόματα σε μια διεργασία όταν το τερματικό στο οποίο εκτελείται είναι κλειστό.
SIGINT: Σήμα 2. Αποστέλλεται σε μια διαδικασία που πατάτε Ctrl+C. Η διαδικασία διακόπτεται και ζητείται να τερματιστεί.
SIGQUIT: Σήμα 3. Αποστέλλεται σε μια διεργασία εάν ο χρήστης στείλει ένα σήμα τερματισμού Ctrl+D.
SIGKILL: Σήμα 9. Η διαδικασία τερματίζεται αμέσως και δεν θα επιχειρήσει να κλείσει καθαρά. Η διαδικασία δεν κατεβαίνει με χάρη.
SIGTERM: Σήμα 15. Αυτό είναι το προεπιλεγμένο σήμα που αποστέλλεται με kill. Είναι το τυπικό σήμα τερματισμού προγράμματος.
SIGTSTP: Σήμα 20. Αποστέλλεται σε μια διεργασία όταν χρησιμοποιείτε Ctrl+Z. Σταματά τη διαδικασία και τη βάζει στο παρασκήνιο.

  Πώς να παρακολουθήσετε το Netflix στην επιφάνεια εργασίας Linux με το Electronplayer

Πρέπει να χρησιμοποιήσουμε την εντολή kill για να εκδίδουμε σήματα που δεν τους έχουν εκχωρηθεί συνδυασμούς πλήκτρων.

Περαιτέρω Έλεγχος Εργασίας

Μια διαδικασία που μετακινήθηκε στο παρασκήνιο χρησιμοποιώντας Ctrl+Z τοποθετείται σε κατάσταση διακοπής. Πρέπει να χρησιμοποιήσουμε την εντολή bg για να ξεκινήσει να εκτελείται ξανά. Η εκκίνηση ενός προγράμματος ως εκτελούμενη διαδικασία παρασκηνίου είναι απλή. Προσθέστε ένα συμπλεκτικό σύμβολο & στο τέλος της γραμμής εντολών.

Αν και είναι καλύτερο οι διεργασίες παρασκηνίου να μην γράφουν στο παράθυρο του τερματικού, θα χρησιμοποιήσουμε παραδείγματα που το κάνουν. Πρέπει να έχουμε κάτι στα στιγμιότυπα οθόνης στο οποίο μπορούμε να αναφερθούμε. Αυτή η εντολή θα ξεκινήσει έναν ατελείωτο βρόχο ως διαδικασία φόντου:

ενώ αληθινό? κάντε echo “How-To Geek Loop Process”; ύπνος 3? Ολοκληρώθηκε &

ενώ αληθινό?  κάνε ηχώ

Μας λένε τον αριθμό εργασίας και το αναγνωριστικό διαδικασίας της διαδικασίας. Ο αριθμός εργασίας μας είναι 1 και το αναγνωριστικό διαδικασίας είναι 1979. Μπορούμε να χρησιμοποιήσουμε αυτά τα αναγνωριστικά για να ελέγξουμε τη διαδικασία.

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

ls

Για να σταματήσουμε τη διαδικασία μας, μπορούμε να χρησιμοποιήσουμε εργασίες για να υπενθυμίσουμε στον εαυτό μας ποιος είναι ο αριθμός εργασίας και στη συνέχεια να χρησιμοποιήσουμε το kill.

jobs αναφέρει ότι η διεργασία μας είναι η εργασία με τον αριθμό 1. Για να χρησιμοποιήσουμε αυτόν τον αριθμό με kill, πρέπει να προηγηθεί το σύμβολο του ποσοστού %.

jobs
kill %1

Το kill στέλνει το σήμα SIGTERM, αριθμό σήματος 15, στη διεργασία και τερματίζεται. Όταν πατηθεί στη συνέχεια το πλήκτρο Enter, εμφανίζεται μια κατάσταση της εργασίας. Αναφέρει τη διαδικασία ως “τερματισμένη”. Εάν η διαδικασία δεν ανταποκρίνεται στην εντολή kill, μπορείτε να την αναλάβετε. Χρησιμοποιήστε kill with SIGKILL , σήμα αριθμός 9. Απλώς βάλτε τον αριθμό 9 ανάμεσα στην εντολή kill με τον αριθμό εργασίας.

kill 9 %1

Πράγματα που έχουμε καλύψει

Ctrl+C: Στέλνει SIGINT, σήμα 2, στη διεργασία —αν δέχεται είσοδο— και της λέει να τερματίσει.
Ctrl+D: Στέλνει SISQUIT, σήμα 3, στη διεργασία —αν δέχεται είσοδο— και της λέει να τερματίσει.
Ctrl+Z: Στέλνει SIGSTP, σήμα 20, στη διεργασία και της λέει να σταματήσει (αναστολή) και να γίνει διαδικασία παρασκηνίου.
jobs: Εμφανίζει τις εργασίες παρασκηνίου και εμφανίζει τον αριθμό της εργασίας τους.
bg job_number: Επανεκκινεί μια διαδικασία παρασκηνίου. Εάν δεν δώσετε έναν αριθμό εργασίας, χρησιμοποιείται η τελευταία διαδικασία που μετατράπηκε σε εργασία παρασκηνίου.
fg job_number: φέρνει μια διαδικασία παρασκηνίου στο προσκήνιο και την επανεκκινεί. Εάν δεν δώσετε έναν αριθμό εργασίας, χρησιμοποιείται η τελευταία διαδικασία που μετατράπηκε σε εργασία παρασκηνίου.
γραμμή εντολών &: Προσθέτοντας ένα σύμφωνο & στο τέλος μιας γραμμής εντολών εκτελείται αυτή η εντολή ως εργασία φόντου, η οποία εκτελείται.
kill %job_number: Στέλνει το SIGTERM, σήμα 15, στη διαδικασία για να το τερματίσει.
kill 9 %job_number: Στέλνει το SIGKILL, σήμα 9, στη διεργασία και την τερματίζει απότομα.