Κεφάλαιο 11 Διαχείριση Διεργασιών Κάθε πρόγραμμα που τρέχει λέγεται διεργασία. Οι διεργασίες ποικίλουν από πράγματα σαν το X παραθυρικό σύστημα εως προγράμματα συστήματος (δαίμονες) που ξεκινούν με την εκκίνηση το υπολογιστή. Κάθε διεργασία τρέχει από έναν συγκεκριμένο χρήστη. Οι διεργασίες που ξεκινούν κατά την εκκίνηση συνήθως τρέχουν ως root ή nobody. Οι διεργασίες που ξεκινάτε τρέχουν ως εσείς. Οι διεργασίες που ξεκινούν από άλλους χρήστες τρέχουν ως εκείνοι οι χρήστες. Έχετε τον έλεγχο των εργασιών που ξεκινάτε. Επιπλέον, ο root έχει τον έλεγχο όλων των διεργασιών στο σύστημα, συμπεριλαμβάνοντας αυτές που έχουν ξεκινήσει άλλοι χρήστες. Μπορείτε να ελέγξετε και να παρακολουθήσετε τις διεργασίες μέσω αρκετών προγραμμάτων και μερικών εντολών του κελύφους. 11.1 Μεταφορά στο Παρασκήνιο Προγράμματα που ξεκινούν από τη γραμμή εντολών ξεκινούν στο προσκήνιο (foreground). Αυτό σας επιτρέπει να βλέπετε την έξοδο του προγράμματος και να αλληλεπιδράτε με αυτό. Ωστόσο υπάρχουν αρκετές περιπτώσεις που θα θέλατε το πρόγραμμα να μην καταλαμβάνει το τερματικό. Τότε λέμε ότι το πρόγραμμα τρέχει το παρασκήνιο (background) και υπάρχουν αρκετοί τρόποι να πραγματοποιηθεί. Ο πρώτος τρόπος να στείλετε μια διεργασία στο παρασκήνιο είναι η προσθήκη του συμβόλου & στη γραμμή εντολών όταν ξεκινάτε το πρόγραμμα. Για παράδειγμα, ας υποθέσουμε ότι θέλετε ο αναπαραγωγέας mp3 amp να παίξει έναν κατάλογο γεμάτο με mp3, αλλά θα θέλατε να κάνετε κάτι άλλο στο ίδιο τερματικό. Η ακόλουθη εντολή θα ξεκινήσει το amp στο παρασκήνιο: % amp *.mp3 & Το πρόγραμμα θα τρέξει κανονικά και θα σας επιστραφεί η γραμμή εντολών. Ο άλλος τρόπος να στείλετε μια διεργασία στο παρασκήνιο είναι ενώ αυτή τρέχει. Αρχικά ξεκινήστε το πρόγραμμα. Ενώ αυτό τρέχει, πληκτρολογήστε Control+z. Αυτό παρεμποδίζει (suspend) τη διεργασία. Μια παρεμποδιζόμενη διεργασία βασικά κάνει παύση. Προσωρινά σταματά να τρέχει, αλλά μπορεί να ξαναξεκινήσει οποιαδήποτε στιγμή. Αφού παρεμποδίσετε μια διεργασία επιστρέφετε στη γραμμή εντολών. Μπορείτε να μεταφέρετε τη διεργασία στο παρασκήνιο πληκτρολογώντας: % bg Τώρα η παρεμποδιζόμενη διεργασία τρέχει στο παρασκήνιο. 11.2 Μεταφορά στο Προσκήνιο Αν θέλετε να αλληλεπιδράσετε με μια διεργασία στο παρασκήνιο μπορείτε να την επαναφέρετε στο προσκήνιο. Αν έχετε μόνο μια διεργασία στο παρασκήνιο, μπορείτε να την επαναφέρετε πληκτρολογώντας: % fg Αν το πρόγραμμα δεν έχει τελειώσει, το πρόγραμμα θα πάρει τον έλεγχο του τερματικού και δεν θα επιστρέψετε σε γραμμή εντολών. Μερικές φορές το πρόγραμμα θα ολοκληρωθεί ενώ βρίσκεται στο παρασκήνιο. Σε αυτή την περίπτωση θα πάρετε ένα μήνυμα σαν αυτό: [1]+ Done /bin/ls $LS_OPTIONS Αυτό σας λέει ότι η διεργασία στο παρασκήνιο (σε αυτή την περίπτωση η ls, όχι ιδιαίτερα ενδιαφέρον) έχει ολοκληρωθεί. Είναι πιθανό να έχετε περισσότερες από μια διεργασίες στο παρασκήνιο ταυτόχρονα. Όταν συμβαίνει αυτό, πρέπει να ξέρετε πια διεργασία θέλετε να φέρετε στο προσκήνιο. Πληκτρολογώντας απλά fg θα επαναφέρετε την διεργασία που μεταφέρθηκε τελευταία στο παρασκήνιο. Τι συμβαίνει αν έχετε μια ολόκληρη λίστα διεργασιών στο παρασκήνιο; Ευτυχώς ο bash περιλαμβάνει μια εντολή εμφάνισης όλων των διεργασιών. Λέγεται jobs και δίνει έξοδο ως εξής:
% jobs [1] Stopped vim [2]- Stopped amp [3]+ Stopped man ps Αυτό εμφανίζει όλες τις διεργασίες στο παρασκήνιο. Όπως μπορείτε να δείτε όλες έχουν σταματήσει. Αυτό σημαίνει ότι οι διεργασίες παρεμποδίζονται. Ο αριθμός είναι ένα είδος αναγνωριστικού (ID) για όλες τις διεργασίες στο παρασκήνιο. Το αναγνωριστικό με το συν δίπλα του (man ps) είναι η διεργασία που θα επιστρέψει στο προσκήνιο αν πληκτρολογήσετε fg. Αν θέλατε να επαναφέρετε τον vim στο προσκήνιο, θα πληκτρολογούσατε: % fg 1 και ο vim θα πηδούσε πίσω στην κονσόλα. Η μεταφορά διεργασιών στο παρασκήνιο μπορεί να είναι πολύ χρήσιμη αν έχετε μόνο ένα τερματικό ανοικτό μέσω μιας σύνδεσης dialup. Μπορείτε να έχετε αρκετά προγράμματα να τρέχον σε αυτό το τερματικό και να εναλλάσσεστε περιοδικά μεταξύ αυτών. 11.3 ps Άρα τώρα ξέρετε πως να μεταβείτε μεταξύ αρκετών διεργασιών που ξεκινήσατε από τη γραμμή εντολών. Και επίσης ξέρετε ότι τρέχουν πολλές διεργασίες συνεχώς. Άρα πως εμφανίζονται όλα αυτά τα προγράμματα; Λοιπόν, χρησιμοποιείτε την εντολή ps(1). Αυτή η εντολή έχει πολλές επιλογές και εμείς θα καλύψουμε μόνο τις πιο σημαντικές εδώ. Για μια ολοκληρωμένη λίστα δείτε τη σελίδα man για την ps. Οι σελίδες man καλύπτονται σε βάθος στην ενότητα 2.1.1. Απλά πληκτρολογώντας ps θα λάβετε μια λίστα των προγραμμάτων που τρέχουν στο τερματικό σας. Αυτό περιλαμβάνει τις διεργασίες στο προσκήνιο (οι οποίες περιλαμβάνουν το κέλυφος που χρησιμοποιείτε και φυσικά την ίδια την ps). Επίσης εμφανίζονται οι διεργασίες που τρέχετε στο παρασκήνιο. Πολλές φορές, αυτό θα είναι μια πολύ σύντομη λίστα: % ps PID TTY TIME CMD 7923 ttyp0 00:00:00 bash 8059 ttyp0 00:00:00 ps Αν και αυτό δεν είναι πολλές διεργασίες, οι πληροφορίες είναι πολύ τυπικές. Θα λάβετε τις ίδιες στήλες χρησιμοποιώντας την κανονική ps άσχετα από τον αριθμό των διεργασιών που τρέχουν. Άρα τι σημαίνουν όλα αυτά; Λοιπόν, PID είναι ο αναγνωριστικό της διεργασίας (process ID). Οι διεργασίες που τρέχουν λαμβάνουν ένα μοναδικό αναγνωριστικό που από το 1 ως το 32767. Σε κάθε διεργασία δίνεται το επόμενο ελεύθερο αναγνωριστικό. Όταν μια διεργασία τερματιστεί (ή σκοτωθεί, όπως θα δείτε στο επόμενο κεφάλαιο) επιστρέφει το PID της. Όταν φτάσουμε στο μέγιστο PID, το επόμενο ελεύθερο PID θα αντιστοιχεί κυκλικά στο χαμηλότερο ελεύθερο. Η στήλη TTY δείχνει σε πιο τερματικό τρέχει η διεργασία. Μια απλή ps θα εμφανίσει μόνο τα προγράμματα που τρέχουν στο τρέχον τερματικό, άρα όλες οι διεργασίες δίνουν την ίδια πληροφορία στη στήλη TTY. Όπως μπορείτε να δείτε, και οι δύο διεργασίες στη λίστα τρέχουν στο ttyp0. Αυτό σημαίνει ότι τρέχουν είτε από μακρυά ή από ένα X τερματικό κάποιου είδους. Η στήλη TIME μας έδειξε για πόσο χρόνο της CPU έχει τρέξει η διεργασία. Αυτό είναι διαφορετικό από τον πραγματικό χρόνο που τρέχει η διεργασία. Θυμηθείτε ότι το Linux είναι ένα πολυδιεργαστικό (multitasking) λειτουργικό σύστημα. Υπάρχουν πολλές διεργασίες που τρέχουν συνεχώς, και αυτές οι διεργασίες λαμβάνουν ένα μικρό τμήμα του χρόνου του επεξεργαστή. Άρα η στήλη TIME πρέπει να δείχνει χρόνο πολύ λιγότερο από αυτόν που πραγματικά τρέχει. Αν δείτε περισσότερο από μερικά λεπτά στη στήλη TIME σημαίνει ότι κάτι πάει στραβά. Τέλος, η στήλη CMD δείχνει τι πραγματικά είναι το πρόγραμμα. Δείχνει μόνο το βασικό όνομα του προγράμματος, όχι τις τυχόν παραμέτρους γραμμής εντολών ή παρόμοιες πληροφορίες. Για να λάβετε αυτές τις πληροφορίες θα χρειαστεί να χρησιμοποιήσετε μια από τις πολλές επιλογές της ps. Θα το συζητήσουμε σύντομα.
Μπορείτε να λάβετε μια ολοκληρωμένη λίστα των διεργασιών που τρέχουν στο σύστημά σας χρησιμοποιώντας το σωστό συνδυασμό επιλογών. Αυτό πιθανότατα οδηγήσει σε μια μεγάλου μήκους λίστα διεργασιών (πενήντα πέντε στον φορητό μου ενώ γράφω αυτή την πρόταση) και κατά συνέπεια θα περικόψω την έξοδο: % ps -ax PID TTY STAT TIME COMMAND 1? S 0:03 init [3] 2? SW 0:13 [kflushd] 3? SW 0:14 [kupdate] 4? SW 0:00 [kpiod] 5? SW 0:17 [kswapd] 11? S 0:00 /sbin/kerneld 30? SW 0:01 [cardmgr] 50? S 0:00 /sbin/rpc.portmap 54? S 0:00 /usr/sbin/syslogd 57? S 0:00 /usr/sbin/klogd -c 3 59? S 0:00 /usr/sbin/inetd 61? S 0:04 /usr/local/sbin/sshd 63? S 0:00 /usr/sbin/rpc.mountd 65? S 0:00 /usr/sbin/rpc.nfsd 67? S 0:00 /usr/sbin/crond -l10 69? S 0:00 /usr/sbin/atd -b 15 -l 1 77? S 0:00 /usr/sbin/apmd 79? S 0:01 gpm -m /dev/mouse -t ps2 94? S 0:00 /usr/sbin/automount /auto file /etc/auto.misc 106 tty1 S 0:08 -bash 108 tty3 SW 0:00 [agetty] 109 tty4 SW 0:00 [agetty] 110 tty5 SW 0:00 [agetty] 111 tty6 SW 0:00 [agetty] [output cut] Οι περισσότερες από αυτές τις διεργασίες ξεκινούν κατά τον χρόνο εκκίνησης στα περισσότερα συστήματα. Έχω κάνει μερικές τροποποιήσεις στο σύστημά μου, άρα η δικιά σας κατανάλωση καυσίμων (mileage) πιθανότατα θα διαφέρει. Ωστόσο, θα δείτε τις περισσότερες από αυτές τις διεργασίες και στο δικό σας σύστημα. Όπως μπορείτε να δείτε, αυτές οι επιλογές εμφανίζουν τις παραμέτρους γραμμής εντολών των διεργασιών που τρέχουν. Πρόσφατα, ένα τρωτό σημείο του πυρήνα στο ptrace διευκόλυνε μια διόρθωση που δεν εμφανίζει τις παραμέτρους γραμμής εντολών για πολλές από τις διεργασίες που τρέχουν. Αυτές τώρα εμφανίζονται σε αγκύλες όπως οι διεργασίες με PID 108 ως 110. Επίσης φέρνει μερικές επιπλέον στήλες και επιπλέον ενδιαφέρουσα έξοδο. Πρώτα θα παρατηρήσετε ότι πολλές από αυτές τις διεργασίες εμφανίζονται να τρέχουν στο tty "?". Αυτές δεν είναι προσαρτημένες σε κανένα συγκεκριμένο τερματικό. Αυτό είναι πιο διαδεδομένο με τους δαίμονες, οι οποίοι είναι διεργασίες που δεν προσαρτώνται σε ένα συγκεκριμένο τερματικό. Συνηθισμένοι δαίμονες είναι οι sendmail, BIND, apache και NFS. Αυτοί τυπικά περιμένουν για κάποια αίτηση από έναν πελάτη (client) και του επιστρέφουν πληροφορίες κατ' αίτημα. Δεύτερον, υπάρχει μια νέα στήλη: STAT. Δείχνει την κατάσταση της διεργασίας. Το S αντιστοιχεί στο sleeping: η διεργασία περιμένει να συμβεί κάτι. Το Z αντιστοιχεί σε μια zombied διεργασία. Μια διεργασία zombied είναι μια της οποίας ο γονέας πέθανε, αφήνοντας πίσω τη διεργασία απόγονο. Αυτό δεν είναι καλό. To D αντιστοιχεί σε μια διεργασία που έχει εισέλθει σε uninterruptible sleep. Συχνά αυτές οι διεργασίες αρνούνται να πεθάνουν ακόμα και αν δεχθούν ένα SIGKILL. Μπορείτε να διαβάσετε περισσότερα για το SIGKILL αργότερα, στο επόμενο κεφάλαιο σχετικά με την kill. To W αντιστοιχεί στη σελιδοποίηση (paging). Μια νεκρή διεργασία εμφανίζεται με X. Μια διεργασία που εμφανίζεται με Τ είναι traced, ή σταματημένη. To R σημαίνει ότι η διεργασία μπορεί να τρέξει.
Αν θέλετε ακόμα περισσότερες πληροφορίες για τις διεργασίες που τρέχουν, δοκιμάστε αυτό: % ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 344 80? S Mar02 0:03 init [3] root 2 0.0 0.0 0 0? SW Mar02 0:13 [kflushd] root 3 0.0 0.0 0 0? SW Mar02 0:14 [kupdate] root 4 0.0 0.0 0 0? SW Mar02 0:00 [kpiod] root 5 0.0 0.0 0 0? SW Mar02 0:17 [kswapd] root 11 0.0 0.0 1044 44? S Mar02 0:00 /sbin/kerneld root 30 0.0 0.0 1160 0? SW Mar02 0:01 [cardmgr] bin 50 0.0 0.0 1076 120? S Mar02 0:00 /sbin/rpc.port root 54 0.0 0.1 1360 192? S Mar02 0:00 /usr/sbin/sysl root 57 0.0 0.1 1276 152? S Mar02 0:00 /usr/sbin/klog root 59 0.0 0.0 1332 60? S Mar02 0:00 /usr/sbin/inet root 61 0.0 0.2 1540 312? S Mar02 0:04 /usr/local/sbi root 63 0.0 0.0 1796 72? S Mar02 0:00 /usr/sbin/rpc. root 65 0.0 0.0 1812 68? S Mar02 0:00 /usr/sbin/rpc. root 67 0.0 0.2 1172 260? S Mar02 0:00 /usr/sbin/cron root 77 0.0 0.2 1048 316? S Mar02 0:00 /usr/sbin/apmd root 79 0.0 0.1 1100 152? S Mar02 0:01 gpm root 94 0.0 0.2 1396 280? S Mar02 0:00 /usr/sbin/auto chris 106 0.0 0.5 1820 680 tty1 S Mar02 0:08 -bash root 108 0.0 0.0 1048 0 tty3 SW Mar02 0:00 [agetty] root 109 0.0 0.0 1048 0 tty4 SW Mar02 0:00 [agetty] root 110 0.0 0.0 1048 0 tty5 SW Mar02 0:00 [agetty] root 111 0.0 0.0 1048 0 tty6 SW Mar02 0:00 [agetty] [output cut] Αυτό είναι πολλές πληροφορίες. Βασικά, προσθέτει πληροφορίες που περιλαμβάνουν τον χρήστη που ξεκίνησε τη διεργασία, πόσους από τους πόρους συστήματος χρησιμοποιεί η διεργασία (οι στήλες %CPU, %MEM, VSZ και RSS), και τη μέρα που ξεκίνησε η διεργασία. Προφανως, πρόκειται για πολλές πληροφορίες χρήσιμες για έναν διαχειριστή συστημάτων. Επίσης φέρνει ένα ακόμα σημείο στην επιφάνεια: οι πληροφορίες δεν χωρούν στα όρια της οθόνης και δεν μπορείτε να δείτε τα πάντα. Η επιλογή -w θα εξαναγκάσει την ps να διπλώσει τις μεγάλου μήκους γραμμές. Δεν είναι ιδιαίτερα όμορφο αλλά δουλεύει. Τώρα έχετε την πλήρη λίστα για κάθε διεργασία. Υπάρχουν ακόμα περισσότερες πληροφορίες που μπορείτε να απεικονίσετε για κάθε διεργασία. Ελέγξτε την πολύ εκτενή σελίδα man για την ps. Ωστόσο, οι επιλογές που εμφανίζονται παραπάνω είναι οι πιο δημοφιλείς και αυτές θα χρησιμοποιείτε πιο συχνά. 11.4 kill Περιστασιακά, τα προγράμματα δεν συμπεριφέρονται σωστά και θα πρέπει να τα επαναφέρετε σε τάξη (put them back in the line). Το πρόγραμμα για αυτού του τύπου τη διαχείριση λέγεται kill(1), και μπορεί να χρησιμοποιηθεί για τον έλεγχο διεργασιών με πολλούς τρόπους. Η προφανής χρήση της kill είναι να σκοτώσει μια διεργασία. Θα χρειαστεί να το κάνετε αυτό αν ένα πρόγραμμα έχει ξεφύγει και καταναλώνει πολλούς πόρους συστήματος, ή απλά σας ενοχλεί που τρέχει. Για να σκοτώσετε μια διεργασία, θα πρέπει να ξέρετε το PID ή το όνομά της. Για να λάβετε το PID χρησιμοποιήστε την εντολή ps όπως συζητήθηκε στην προηγούμενη ενότητα. Για παράδειγμα, για να σκοτώσετε τη διεργασία 4747 θα δίνατε την ακόλουθη εντολή: % kill 4747 Σημειώστε ότι πρέπει να είστε ο ιδιοκτήτης της διεργασίας προκειμένου να τη σκοτώσετε. Αυτό είναι ένα χαρακτηριστικό ασφαλείας. Αν σας επιτρεπόταν να σκοτώσετε διεργασίες που ξεκίνησαν άλλοι
χρήστες θα ήταν δυνατό να κάνετε ύποπτα πράγματα όλων των ειδών. Φυσικά ο root μπορεί να σκοτώσει οποιαδήποτε διεργασία στο σύστημα. Υπάρχει μια παραλλαγή της kill που λέγεται killall(1). Αυτό το πρόγραμμα κάνει ότι ακριβώς λέει: σκοτώνει όλες τις διεργασίες που τρέχουν και έχουν ένα συγκεκριμένο όνομα. Αν θα θέλατε να σκοτώσετε όλες τις διεργασίες του vim που τρέχουν, θα πληκτρολογούσατε την επόμενη εντολή: % killall vim Όλες οι διεργασίες του vim που έχετε να τρέχουν θα πεθάνουν. Αν το κάνατε αυτό ως root θα σκοτώνατε τις διεργασίες του vim που τρέχουν για όλους τους χρήστες. Αυτό φέρνει στην επιφάνεια έναν ενδιαφέροντα τρόπο να διώξετε οποιονδήποτε (και εσάς) από το σύστημα: # killall bash Μερικές φορές ένα κανονικό kill δεν αρκεί. Συγκεκριμένες διεργασίες δεν θα πεθάνουν με ένα kill. Θα χρειαστεί να χρησιμοποιήσετε ισχυρότερη μορφή. Αν αυτή η εκνευριστική διεργασία 4747 δεν απαντούσε στο αίτημα σας με την kill, θα μπορούσατε να κάνετε το ακόλουθο: % kill -9 4747 Αυτό σχεδόν σίγουρα θα αναγκάσει την διεργασία 4747 να πεθάνει. Μπορείτε να κάνετε το ίδιο πράγμα με την killall. Αυτό που κάνει είναι να στείλει διαφορετικό σήμα στη διεργασία. Μια κανονική kill στέλνει ένα σήμα SIGTERM (διακοπή) στη διεργασία, που τις λέει να τελειώσει ότι κάνει, να καθαρίσει και να τερματιστεί. Η kill -9 στέλνει ένα σήμα SIGKILL (θανατηφόρο) στη διεργασία, το οποίο ουσιαστικά την πετά. Στη διεργασία δεν επιτρέπεται να καθαρίσει και κάποιες φορές σκοτώνοντας κάτι με SIGKILL μπορούν να συμβούν άσχημα πράγματα όπως απώλεια δεδομένων. Υπάρχει μια ολόκληρη λίστα σημάτων στη διάθεσή σας. Μπορείτε να δείτε όλα τα σήματα πληκτρολογώντας το ακόλουθο: % kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR Ο αριθμός μπορεί να χρησιμοποιηθεί με την kill, ενώ το όνομα αφαιρώντας το αρχικό "SIG" μπορεί να χρησιμοποιηθεί με την killall. Εδώ ένα άλλο παράδειγμα: % killall -KILL vim Η τελευταία χρήση της kill είναι να ξαναξεκινήσει μια διεργασία. Στέλνοντας ένα SIGHUP θα εξαναγκάσει πολλές διεργασίες να διαβάσουν τα αρχεία ρυθμίσεών τους. Αυτό είναι ιδιαίτερα χρήσιμο για να πείτε στις διεργασίες συστήματος να ξαναδιαβάσουν τα αρχεία ρυθμίσεών τους μετά από επεξεργασία. 11.5 top Τέλος, υπάρχει μια εντολή που μπορείτε να χρησιμοποιήσετε για την εμφάνιση πληροφοριών σχετικά με τις διεργασίες συστήματος που ανανεώνονται. Αυτή η εντολή λέγεται top(1), και ξεκινάει ως εξής: % top Αυτό θα εμφανίσει μια ολόκληρη οθόνη με πληροφορίες για τις διεργασίας που τρέχουν στο
σύστημά, όπως επίσης και μερικές γενικές πληροφορίες για το σύστημα. Αυτό περιλαμβάνει το μέσο φορτίο (load average), τον αριθμό διεργασιών, την κατάσταση της CPU, πληροφορίες για την ελεύθερη μνήμη και πληροφορίες για τις διεργασίες συμπεριλαμβανομένων του PID, του χρήστη της προτεραιότητας, της χρήσης CPU και μνήμης, του χρόνου που τρέχει και του ονόματος προγράμματος. 6:47pm up 1 day, 18:01, 1 user, load average: 0.02, 0.07, 0.02 61 processes: 59 sleeping, 2 running, 0 zombie, 0 stopped CPU states: 2.8% user, 3.1% system, 0.0% nice, 93.9% idle Mem: 257992K av, 249672K used, 8320K free, 51628K shrd, 78248K buff Swap: 32764K av, 136K used, 32628K free, 82600K cached PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND 112 root 12 0 19376 18M 2468 R 0 3.7 7.5 55:53 X 4947 david 15 0 2136 2136 1748 S 0 2.3 0.8 0:00 screenshot 3398 david 7 0 20544 20M 3000 S 0 1.5 7.9 0:14 gimp 4946 root 12 0 1040 1040 836 R 0 1.5 0.4 0:00 top 121 david 4 0 796 796 644 S 0 1.1 0.3 25:37 wmsmpmon 115 david 3 0 2180 2180 1452 S 0 0.3 0.8 1:35 wmaker 4948 david 16 0 776 776 648 S 0 0.3 0.3 0:00 xwd 1 root 1 0 176 176 148 S 0 0.1 0.0 0:13 init 189 david 1 0 6256 6156 4352 S 0 0.1 2.4 3:16 licq 4734 david 0 0 1164 1164 916 S 0 0.1 0.4 0:00 rxvt 2 root 0 0 0 0 0 SW 0 0.0 0.0 0:08 kflushd 3 root 0 0 0 0 0 SW 0 0.0 0.0 0:06 kupdate 4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kpiod 5 root 0 0 0 0 0 SW 0 0.0 0.0 0:04 kswapd 31 root 0 0 340 340 248 S 0 0.0 0.1 0:00 kerneld 51 root 0 0 48 48 32 S 0 0.0 0.0 0:00 dhcpcd 53 bin 0 0 316 316 236 S 0 0.0 0.1 0:00 rpc.portmap 57 root 0 0 588 588 488 S 0 0.0 0.2 0:01 syslogd Λέγεται top διότι τα προγράμματα που χρησιμοποιούν πιο εντατικά τη CPU εμφανίζονται στην κορυφή. Μια ενδιαφέρουσα σημείωση είναι ότι η top εμφανίζεται στην κορυφή στα περισσότερα ανενεργά (και μερικά ενεργά) συστήματα λόγω του βαθμού που χρησιμοποιεί τη CPU. Ωστόσο, η top είναι αρκετά χρήσιμη για να δείξει πιο πρόγραμμα δεν συμπεριφέρεται σωστά και πρέπει να τερματιστεί. Αλλά ας υποθέσουμε ότι θέλετε μόνο μια λίστα των δικών σας διεργασιών, ή των διεργασιών κάποιου άλλου χρήστη. Οι διεργασίες που θέλετε να δείτε ίσως να μην είναι μεταξύ των προγραμμάτων με την εντονότερη χρήση της CPU. Η επιλογή -u σας επιτρέπει να καθορίσετε ένα όνομα χρήστη ή UID και να παρακολουθείτε μόνο τις διεργασίες που ανήκουν σε αυτό το UID. % top -u alan PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 3622 alan 13 0 11012 10m 6956 S 1.0 2.1 0:03.66 gnome-terminal 3739 alan 13 0 1012 1012 804 R 0.3 0.2 0:00.06 top 3518 alan 9 0 1312 1312 1032 S 0.0 0.3 0:00.09 bash 3529 alan 9 0 984 984 848 S 0.0 0.2 0:00.00 startx 3544 alan 9 0 640 640 568 S 0.0 0.1 0:00.00 xinit 3548 alan 9 0 8324 8320 6044 S 0.0 1.6 0:00.30 gnome-session 3551 alan 9 0 7084 7084 1968 S 0.0 1.4 0:00.50 gconfd-2 3553 alan 9 0 2232 2232 380 S 0.0 0.4 0:00.05 esd 3555 alan 9 0 2552 2552 1948 S 0.0 0.5 0:00.10 bonobo-activati 3557 alan 9 0 2740 2740 2224 S 0.0 0.5 0:00.05 gnome-smproxy 3559 alan 9 0 6496 6492 5004 S 0.0 1.3 0:00.31 gnome-settings- 3565 alan 9 0 1740 1740 1440 S 0.0 0.3 0:00.28 xscreensaver
3568 alan 9 0 7052 7052 4960 S 0.0 1.4 0:02.28 metacity 3572 alan 9 0 11412 11m 7992 S 0.0 2.2 0:01.58 gnome-panel 3574 alan 9 0 12148 11m 8780 S 0.0 2.4 0:00.64 nautilus 3575 alan 9 0 12148 11m 8780 S 0.0 2.4 0:00.00 nautilus 3576 alan 9 0 12148 11m 8780 S 0.0 2.4 0:00.00 nautilus Όπως μπορείτε να δείτε, αυτή τη στιγμή τρέχω X, top, ένα gnome-terminal (στο οποίο γράφω αυτά) και πολλές άλλες διεργασίες σχετικές με το X που καταναλώνουν τον περισσότερο χρόνο της CPU για εμένα. Αυτός είναι ένας καλός τρόπος να δείτε πόσο σκληρά δουλεύουν οι χρήστες σας στο σύστημά σας. Η top επίσης υποστηρίζει την παρακολούθηση διεργασιών με βάση το PID τους, αγνοώντας τις αδρανείς (idle) ή zombied διεργασίες, και έχει πολλές ακόμα επιλογές. Ο καλύτερος τρόπος να μάθετε να χειρίζεστε τις επιλογές αυτές είναι η σελίδα man της top.