Nutzerkommandos - Prozesssteuerung
               | 
              
                
               | 
             
           
          
         
          
         
          
          Das Kommando lässt einen zuvor gestoppten Prozess im Hintergrund weiterlaufen.
          Die Ausführung eines Prozesses wird durch Senden des Signals 19 (SIGSTOP) gestoppt.
          Befinden sich mehrere Prozesse im Zustand "Stopp", kann mittels %n der
          gewünschte Prozess über seine Jobnummer angesprochen werden (siehe jobs). 
          
            
              
              user@sonne> ls -l > fifo 
              ^z 
              [1]+ 
              Stopped                
              ls --color=tty -l >fifo 
              user@sonne> bg 
              [1]+ ls --color=tty -l >fifo & 
              user@sonne>
                | 
             
           
          Bemerkung: Die Eingabe von [Ctrl]-[Z] bewirkt in der Bash das Senden des
          Signals SIGSTP an den aktiven Prozess. 
          
          
          
          Ein im Hintergrund laufender Prozess kann in den Vordergrund geholt werden. Soll nicht
          gerade der zuletzt im Hintergrund gestartet Prozess gewählt werden, ist die Angabe
          der Jobnummer erforderlich, die man mit dem Kommando jobs ermitteln
          kann. 
          
            
              
              user@sonne> sleep 100& sleep
              500& 
              [1] 1177 
              [2] 1178 
              user@sonne> fg %2
                | 
             
           
          
          
          
          
            
              | Aufruf:   jobs [-lnprs] [jobspec ...]
                | 
             
           
          Mit dem Kommando lassen sich alle Hintergrundprozesse ("Jobs") der aktiven Shell
          anzeigen. 
          Als Optionen versteht jobs: 
          
                -l 
                Zusätzliche Anzeige der PID 
                -n 
                Nur Prozesse anzeigen, deren Status sich seit dem letzten Aufruf von jobs geändert hat 
                -p 
                Nur die PIDs anzeigen 
                -r 
                Nur aktive Prozesse anzeigen 
                -s 
                Nur gestoppte Prozesse anzeigen 
           
          
          
            
              
              user@sonne> sleep 100& 
              [1] 1177 
              user@sonne> jobs 
              [1]+ 
              Running                
              sleep 10000 & 
              user@sonne> jobs -n 
              [1] 1177
                | 
             
           
          
          
          
          
            
              | Aufruf:   kill [ -s signal | -n signum | sigspec ]
              pid ...
                | 
             
           
          Mit dem Kommando lassen sich Signale an Prozesse versenden. Die Angabe der Prozesse
          erfordert deren Prozessnummer (PID) oder die Jobnummer (%n). Fehlt die
          Angabe des Signals, wird Signal 15 (SIGTERM) angenommen. 
          Mit der Option -l gibt kill eine Liste der möglichen
          Signale aus: 
          
            
              
              user@sonne> 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
                | 
             
           
          Die gebräuchlichsten Signale sind dabei 1 (SIGHUP), das vor allem verwendet wird,
          um Prozesse zum erneuten Einlesen ihrer Konfigurationsdateien zu zwingen, 15 (SIGTERM),
          das einer höflichen Aufforderung an einen Prozess gleichkommt, er solle doch seine
          Arbeit beenden (ein Prozess kann dieses Signal ignorieren) und 9 (SIGKILL), das für
          den betreffenden Prozess das sofortige Ende bedeutet. 
          
            
              
              user@sonne> kill -TERM 255 
              user@sonne> kill -15 236 
               
               user@sonne> sleep 100& 
              [1] 5926 
              user@sonne> kill -KILL %1
                | 
             
           
          Bei der Signalangabe in symbolischer Form wird der Signalname ohne die Vorsilbe SIG
          benutzt! 
          
          
          
            
              | Aufruf:    killall [-egiqvw] [-signal] name
              ...
                | 
             
           
          Der wesentlichste Unterschied zum Kommando kill ist die Spezifizierung
          der Prozesse über den Namen der Kommandos, die sie ausführen oder mittels ihrer
          Gruppennummer (-g GID). 
           killall sendet allen Prozessen Signale, die das Kommando ausführen,
          mit der Option -i kann aber eine nochmalige Rückfrage vor dem
          tatsächlichen Senden erzwungen werden: 
          
            
              
              user@sonne> killall -i -15 bash 
              Kill bash(280) ? (y/n) n 
              Kill bash(350) ? (y/n) n 
              Kill bash(351) ? (y/n) n 
              Kill bash(352) ? (y/n) n 
              bash: no process killed
                | 
             
           
          Mit der Option -w wartet killall so lange, bis der letzte
          der angegebene Prozess seine Arbeit beendet hat. Das Kommando schickt hierzu periodisch
          (jede Sekunde) erneut das Signal. 
          
          
          
            
              | Aufruf:   nice [OPTION]... [COMMAND [ARG]...]
               | 
             
           
          Ein zu startendes Kommando kann durch nice eine andere als die
          voreingestellte Priorität gegeben werden. D.h. im Vergleich zur "normalen
          Priorität" erhält ein solcher Prozess prozentual weniger/mehr Rechenzeit
          zugeteilt. 
          Ein Wert von -20 bedeutet dabei die höchste Priorität; ein Wert von 20 die
          geringste. Ein normaler Nutzer darf die Priorität eines Prozesses nur verringern
          (also den Wert erhöhen), nur Root kann diese erhöhen (den Wert verringern). 
          
            
              
              user@sonne> nice -n 19 gcc
              bigprogram.c 
              root@sonne> nice -n -10 inetd
                | 
             
           
          Mit renice kann die Priorität eines laufenden Prozesses
          beeinflusst werden. 
          
          
          
            
              | Aufruf:   nohup COMMAND [ARG]...
                | 
             
           
          Das von nohup gestartete Kommando läuft unabhängig von der
          aktiven Shell. D.h. ein so gestartetes Kommando arbeitet auch nach dem Beenden der
          Sitzung (logout) weiter. Die Ausgaben von nohup werden ggf. in eine Datei
          nohup.out umgeleitet. Kann diese im aktuellen Verzeichnis nicht erzeugt
          werden, wird sie im Heimatverzeichnis angelegt. Scheitert auch dies, beendet
          nohup seine Tätigkeit. 
           Ein über nohup gestartetes Kommandos erhält eine um 5
          erhöhte Priorität. 
          
            
              
              user@sonne> bash 
              user@sonne> ./sleepproc& 
              [1] 776 
              user@sonne> exit 
              user@sonne> ps eax | grep spleepproc 
              user@sonne> 
              user@sonne> bash 
              user@sonne> nohup ./sleepproc& 
              [1] 786 
              user@sonne> exit 
              user@sonne> ps eax | grep spleepproc 
              786 ? S N 0:00 sh ./sleepproc... 
                | 
             
           
          Anmerkung: Im Beispiel wird in einer Subshell ein Skript "sleepproc" gestartet
          und die Shell beendet. Wie zu erwarten war, wurde der in der Shell gestartete Prozess mit
          dem Ende der Shell beendet. In einem zweiten Schritt wird das Skript "sleepproc"
          unabhängig von der Shell gestartet... es existiert auch nach Beendigung der Shell
          weiter. 
          
          
          
          Das Kommando gibt eine Momentaufnahme der Prozesse aus. Über Optionen lassen sich
          zum einen die anzuzeigenden Prozesse selektieren und zum anderen das Ausgabeformat
          steuern. 
           Achtung: das Kommando verwendet mehrere Stile der
          Kommandoeingabe, die Option a besitzt eine andere Bedeutung als die
          Option -a! 
          Wichtige Optionen zur Selektion von Prozessen sind: 
          
                -A oder -e 
                Wirklich alle Prozesse anzeigen 
                a 
                Alle Prozesse anzeigen, die ein Terminal kontrollieren 
                -U bzw. -G 
                Auswahl nach UID bzw. GID 
                N 
                Negation der Auswahl 
                p 
                Nur den angegebenen Prozess (PID ist anzugeben) 
                r 
                Nur laufende Prozesse 
                x 
                Auch Prozesse anzeigen, die kein Terminal kontrollieren 
           
          Optionen, die das Ausgabeformat steuern: 
          
                f 
                Prozesshierarchie als Baum anzeigen 
                -l 
                Langformat 
                e 
                Anzeige der Umgebungsvariablen des Prozesses 
                m 
                Anzeige aller Threads 
           
          
            
              
              user@sonne> ps 
                PID TTY          TIME CMD 
                280 tty1     00:00:00 bash 
                287 tty1     00:00:00 startx 
                288 tty1     00:00:00 tee 
                297 tty1     00:00:00 xinit 
                344 tty1     00:00:02 konsole 
                345 tty1     00:00:00 konsole 
                351 pts/1    00:00:00 bash 
                352 pts/0    00:00:00 bash 
                958 pts/2    00:00:00 ps 
               
               user@sonne> ps -p 280 -l 
                F S   UID   PID  PPID  C PRI  NI ADDR SZ
              WCHAN  TTY          TIME CMD 
              100 S   500   280   273  0  60   0
              -   580 wait4  tty1     00:00:00 bash 
               
               user@sonne> ps -x -f 
                PID TTY      STAT   TIME COMMAND 
                280 tty1     S      0:00
              -bash 
                287 tty1     S      0:00 sh
              /usr/X11R6/bin/startx 
                297 tty1     S      0:00  \_
              xinit /home/user/.xinitrc -- 
                309 tty1     S     
              0:07      \_ kwm 
                344 tty1     S     
              0:02          \_ konsole -restore
              konsolerc.1 -icon konsol 
                351 pts/1    S     
              0:00          |   \_
              /bin/bash 
                345 tty1     S     
              0:00          \_ konsole -restore
              konsolerc.4 -icon konsol 
                352 pts/0    S     
              0:00          |   \_
              /bin/bash 
                669 pts/0    S     
              0:00         
              |       \_ BitchX tec2.saxsys.de 
                346 tty1     S     
              0:01          \_ konsole -restore
              konsolerc.5 -icon konsol 
                354 pts/2    S     
              0:00          |   \_
              /bin/bash 
                985 pts/2    R     
              0:00         
              |       \_ ps -x -f 
                348 tty1     S     
              0:19          \_ webmaker -restore
              webmakerrc.2 
                288 tty1     S      0:00 tee
              /home/user/.X.err 
                339 tty1     S      0:02
              kpanel 
                375 tty1     S      0:00
              /usr/X11R6/bin/xload 
                336 tty1     S      0:00
              krootwm 
                333 tty1     S      0:01
              kbgndwm 
                327 tty1     S      0:01 kfm
              -d
                | 
             
           
          
          
          
          
            
              | Aufruf:   pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p]
              [-u] [-G|-U] [pid|user]
                | 
             
           
          Das Kommando stellt die aktiven Prozesse in einer Baumstruktur dar, welche die
          Prozessvererbung symbolisiert. 
          
            
              
              user@sonne> pstree 
              init-+-actived 
                   |-atd 
                   |-cron 
                   |-gpm 
                   |-httpd---httpd 
                   |-in.identd---in.identd---5*[in.identd] 
                   |-inetd 
                   |-kflushd 
                   |-klogd 
                   |-kpiod 
                   |-kswapd 
                   |-kupdate 
                   |-lockd---rpciod 
                   |-2*[login---bash---ssh] 
                   |-login---sh 
                    |-2*[mingetty] 
                   |-nscd---nscd---5*[nscd] 
                   |-portmap 
                   |-syslogd
                | 
             
           
          Das Beispiel verdeutlich, dass init der Elternprozess aller Prozesse ist.
          pstree versucht per Voreinstellung identische Prozesse in der Darstellung
          zusammen zu fassen, so bedeutet 2*[mingetty], dass 2 Prozesse das Kommando
          mingetty ausführen. Mit der Option -c wird diese
          Zusammenfassung abgeschaltet: 
          
            
              
              ... 
               |-in.identd---in.identd-+-in.identd 
                  
              |                      
              |-in.identd 
                  
              |                      
              |-in.identd 
                  
              |                      
              |-in.identd 
                  
              |                      
              `-in.identd 
              ...
                | 
             
           
          
          
          
          
            
              | Aufruf:   renice priority [[-p] pid ...] [[-g] pgrp
              ...] [[-u] user ...]
                | 
             
           
          Prozessen kann mittels renice nachträglich eine andere
          Priorität zugeteilt werden. Wie auch bei nice gilt, dass einzig Root
          die Priorität erhöhen darf: 
          
            
              
              user@sonne> renice +10 23258 
              23258: Alte Priorität: 0, neue Priorität: 10 
              user@sonne> renice -10 23258 
              renice: 23258: setpriority: Keine Berechtigung 
                | 
             
           
          Das Kommando erlaubt das gleichzeitige Verändern der Prioritäten mehrerer
          Prozesse. Mögliche Angaben sind: 
          
            - Mehrere Prozess-IDs
 
            -g GID Die Gruppennummer von Prozessen 
            -u Nutzer Der Besitzer der Prozesse 
           
           
           
          
          
          
            
              | Aufruf:   top [-] [d delay] [q] [c] [S] [s] [i] [n]
              [b]
                | 
             
           
          top listet Prozesse, sortiert nach ihrem Anteil an CPU-Zeit, auf. Nach
          Voreinstellung wird diese Liste aller 5 Sekunden aktualisiert, mit der Option -d
          Zeit kann ein anderes Intervall eingestellt werden. Eine Option -q
          lässt das Kommando die Liste so oft wie möglich aktualisieren, mit -n
          Anzahl kann die Anzahl der Refreshs eingeschränkt werden.
          Anschließend wird top seine Arbeit beenden. 
          
            
              
              user@sonne> top 
                4:02pm  up  3:16,  9 users,  load average: 0.27, 0.16,
              0.11 
              100 processes: 95 sleeping, 4 running, 1 zombie, 0 stopped 
              CPU states:  4.5% user,  4.7% system,  0.0% nice, 90.7% idle 
              Mem:  127812K av, 122576K used,   5236K free,  77260K
              shrd,   2112K buff 
              Swap: 963816K av,    384K used, 963432K
              free                
              59184K cached 
               
                 PID USER     PRI  NI  SIZE  RSS SHARE
              STAT  LIB %CPU %MEM   TIME COMMAND 
                413 root      11   0 17784  17M 
              2064 R       0  3.5 13.9   5:16 X 
                489 user      10   0  1216
              1216   996 R       0  2.3 
              0.9   5:15 xosview.bin 
               1818 root       4   0  1008
              1008   732 S       0  1.5 
              0.7   0:09 ssh 
               3549 user       7   0  1064
              1064   840 R       0  1.5 
              0.8   0:01 top 
                 98 root       0   0  
              364  364   244 S       0  0.1 
              0.2   0:00 scanlogd 
                  1 root       0  
              0   204  204   172 S      
              0  0.0  0.1   0:03 init 
                  2 root       0  
              0     0    0     0
              SW      0  0.0  0.0   0:00 kflushd 
                  3 root       0  
              0     0    0     0
              SW      0  0.0  0.0   0:00 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:00 kswapd 
                  6 root       0  
              0     0    0     0
              SW      0  0.0  0.0   0:00 md_thread 
                 90 bin        0  
              0   400 400   316 S       0 
              0.0  0.3   0:00 portmap 
                104 root       0   0  
              696  696   548 S       0  0.0 
              0.5   0:00 syslogd 
                108 root       0   0  
              856  856   384 S       0  0.0 
              0.6   0:00 klogd
                | 
             
           
          Als Überschrift zeigt top die Uptime, die Anzahl der Prozesse, eingeteilt nach ihrem Status,
          die Auslastung von CPU, Speicher und Swap an. 
           Es folgen die Informationen zu den einzelnen Prozessen (die Auflistung enthält nur
          die Beschreibung der Standard-Informationen): 
          
                PID 
                Prozessnummer 
                USER 
                Nutzer, mit dessen Rechten der Prozess ausgeführt wird 
                PRI 
                Priorität, mit der der Prozess läuft 
                NI 
                Der nice-Faktor, mit dem der Prozess läuft 
                SIZE 
                Speichergröße des Prozesses inklusive Stack 
                RSS 
                Verbrauch an physischen Speicher 
                SHARE 
                Größe des Speichers, der auch von anderen Prozessen genutzt wird 
                STAT 
                Status des Prozesses 
                LIB 
                Speicherverbrauch der Bibliotheken des Prozesses (bei ELF-Prozessen wird diese
                Größe mit bei SHARE aufgeschlagen) 
                %CPU 
                Verbrauchte CPU-Zeit im letzten Refresh-Intervall (in Prozent) 
                %MEM 
                Speicherverbrauch (in Prozent) 
                COMMAND 
                Kommando, das der Prozess ausführt. 
           
          Interaktive Arbeit mit top
          Während das Kommando in periodischen Abständen das Terminal mit neuen
          Informationen überschwemmt, lassen sich verschiedenste Aktionen vornehmen. Folgende
          Eingaben (Auswahl) bewirken folgende Reaktion: 
          
                [Leertaste] 
                Sofortige Aktualisierung der Anzeige 
                f 
                
                Hierüber kann die Anzeige der Informationen eingestellt werden. Es
                erscheint eine Auflistung aller Informationsfelder, wobei ausgewählte Felder
                mit einem Stern * gekennzeichnet sind. Vor jedem Feld steht ein Bezeichner
                (Buchstabe), durch dessen Eingabe die Auswahl umgeschalten wird. Rückkehr zur
                Ausgabe von top durch [Enter].
                 
                h bzw. ? 
                Anzeige einer Kurzhilfe zu den verschiedenen Kommandos 
                k 
                Zum Senden von Signalen an einen Prozess. Es wird zur Angabe der PID und des zu sendenden Signals aufgefordert. 
                n bzw. # 
                Zum Ändern der Anzahl angezeigter Prozesse. Man wird zur Eingabe der neuen Anzeige aufgefordert. 
                o 
                
                  Ändern der Reihenfolge der Darstellung der Felder. In der oberen Zeile
                  der erscheinenden Ausgabe ist die Reihenfolge symbolisch dargestellt, wobei ein
                  gewähltes Feld durch einen Großbuchstaben markiert ist. Durch Eingabe
                  des entsprechenden Feldbezeichners als Kleinbuchstabe, wird der Eintrag in der
                  Liste "nach hinten" befördert; mittels des Großbuchstaben nach vorn.
                  Rückkehr zur Ausgabe von top durch [Enter]. 
                  
                     
                        
                           
                                Current Field Order: bAcDgHIjklMnoTPrqsuzVYEFWX 
                              Upper case characters move a field to the left, lower case to the right 
                               
                              * A: PID        = Process Id 
                                B: PPID       = Parent Process Id 
                                C: UID        = User Id 
                              * D: USER       = User Name 
                              * E: %CPU       = CPU Usage 
                              * F: %MEM       = Memory Usage 
                                G: TTY        = Controlling tty 
                              * H: PRI        = Priority 
                              * I: NI         = Nice Value 
                              ...
                               | 
                         
                         
                   
                r 
                Ändern der Priorität eines Prozesses 
                q 
                Beendet top 
           
          
         |