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
|