Linuxfibel - Nutzerkommandos - Prozesssteuerung
Aus LinWiki.de
Inhaltsverzeichnis
|
[Bearbeiten] bg - Prozess im Hintergrund weiterlaufen lassen
Aufruf: bg [job_spec]
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 SIGSTOP an den aktiven Prozess.
[Bearbeiten] fg - Hintergrundprozess in den Vordergrund holen
Aufruf: fg [job_spec]
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
[Bearbeiten] jobs - Anzeige aktiver Jobs
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 100 & user@sonne> jobs -n [1] 1177
[Bearbeiten] kill - Prozessen Signale senden
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!
[Bearbeiten] killall - Prozessen Signale senden
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.
[Bearbeiten] nice - Prozess mit anderer Priorität starten
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 -19 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.
[Bearbeiten] nohup - Prozess vom Elternprozess abnabeln
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 Kommando 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 sleepproc 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.
[Bearbeiten] ps - Prozesse anzeigen
Aufruf: ps [options]
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
[Bearbeiten] pstree - Prozessvererbung anzeigen
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 darstellt.
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 verdeutlicht, 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
...
[Bearbeiten] renice - Prozesspriorität ändern
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
[Bearbeiten] top - Prozesse sortiert anzeigen
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.
[Bearbeiten] 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
- u
- Anzeige gefiltert nach Benutzer. Nach dem Drücken von u den zu suchenden Benutzer Eintippen und Enter Drücken. Rückker zur Ansicht von allen Benutzer wieder u Drücken und den Filter über Backspace enfernen
- q
- Beendet top


