Linuxfibel - Nutzerkommandos - Prozesssteuerung

Aus LinWiki.de

Projektseite
Navigation
Anfang
Inhalt
Einleitung
Erste Schritte
Die Bash
Das Dateisystem
Nutzerkommandos
Installation
Shells
Unix-Werkzeuge
System-Administration
X Window System
Der Kernel
Netzwerk Grundlagen
Netzwerk Clients
Netzwerk Server
Sicherheit
Anhang
Register

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
Diese Seite wurde zuletzt am 29. Januar 2010 um 10:07 Uhr geändert.
Diese Seite wurde bisher 32.610-mal abgerufen.