Auf einem Computer ausgeführte Programme und Befehle werden als Prozesse bezeichnet.
Es gibt Eltern- und Kindprozesse. Ein Prozess, der von einem Programm oder Befehl gestartet wird, ist ein Elternprozess. Ein Kindprozess ist das Produkt eines Elternprozesses. Ein Elternprozess kann mehrere Kindprozesse haben. Ein Kindprozess kann jedoch nur einen einzigen Elternprozess haben.
Jedem Prozess wird vom System beim Starten eine Prozessidentifikationsnummer (Prozess-ID) zugeordnet. Wird dasselbe Programm mehrmals gestartet, erhält es jedes Mal eine andere Prozess-ID.
Jeder Prozess, der auf einem System gestartet wird, nutzt einen Teil der verfügbaren Systemressourcen. Werden mehrere Prozesse gleichzeitig ausgeführt, teilt ein im Betriebssystem integrierter Scheduler jedem Prozess auf der Basis festgelegter Prioritäten einen Anteil an Rechenzeit zu. Diese Prioritäten können mit den Befehlen nice und renice geändert werden.
Anmerkung : Zum Zuweisen einer höheren Prozesspriorität müssen Sie Rootberechtigung besitzen. Alle Benutzer können mit dem Befehl nice einem Prozess, den sie starten, und mit dem Befehl renice einem Prozess, den sie bereits gestartet haben, eine niedrigere Priorität zuweisen. In der folgenden Liste sind die verschiedenen Prozesstypen beschrieben:
Prozesse, die von einem Benutzer gestartet werden oder mit dem Benutzer interagieren müssen, werden als Vordergrundprozesse bezeichnet. Prozesse, die ohne Benutzerintervention ausgeführt werden, bezeichnet man als Hintergrundprozesse. Programme und Befehle werden standardmäßig als Vordergrundprozesse ausgeführt. Wenn Sie einen Prozess im Hintergrund ausführen möchten, geben Sie am Ende des Befehls, mit dem der Prozess gestartet wird, ein Et-Zeichen (&) ein.
Dämonprozesse sind unabhängige Prozesse, auf die der Benutzer keinen Einfluss hat. Sie werden ständig im Hintergrund ausgeführt und sind jederzeit verfügbar. Dämonprozesse werden normalerweise beim Starten des Systems gestartet und so lange ausgeführt, bis das System ausgeschaltet wird. Sie werden in der Regel zur Ausführung von Systemservices verwendet und stehen jederzeit mehreren Tasks und Benutzern zur Verfügung. Dämonprozesse werden von Root oder von der Root-Shell gestartet und können nur von Root wieder beendet werden. Beispielsweise wird vom Prozess qdaemon der Zugriff auf Systemressourcen, wie z. B. Drucker, hergestellt. Ein weiterer allgemeiner Dämonprozess ist der Dämonprozess sendmail.
Bei einem Geisterprozess (oder Zombie-Prozess) handelt es sich um
einen inaktiven Prozess, der in der Prozesstabelle zwar noch geführt
wird (d. h., ihm ist immer noch eine Prozess-ID zugeordnet), dem aber
kein Systemspeicherbereich mehr zugeordnet ist. Geisterprozesse sind
beendete Prozesse, die in der Prozesstabelle so lange weiter existieren,
bis der zugehörige Elternprozess beendet oder ein Systemabschluss
durchgeführt und das System erneut gestartet wird. Geisterprozesse haben
den Status
Während des Systembetriebs werden auch Prozesse ausgeführt. Mit dem Befehl ps können Sie ermitteln, welche Prozesse aktiv sind, und Informationen zu diesen Prozessen anzeigen.
Der Befehl ps besitzt mehrere Flags, mit denen angegeben werden kann, welche Prozesse aufgelistet und welche Informationen zu den einzelnen Prozessen angezeigt werden sollen.
Geben Sie Folgendes ein, um alle auf dem System ausgeführten Prozesse anzuzeigen:
ps -ef
Das System zeigt Informationen ähnlich den folgenden an:
USER PID PPID C STIME TTY TIME CMD
root 1 0 0 Jun 28 - 3:23 /etc/init
root 1588 6963 0 Jun 28 - 0:02 /usr/etc/biod 6
root 2280 1 0 Jun 28 - 1:39 /etc/syncd 60
mary 2413 16998 2 07:57:30 - 0:05 aixterm
mary 11632 16998 0 07:57:31 lft/1 0:01 xbiff
mary 16260 2413 1 07:57:35 pts/1 0:00 /bin/ksh
mary 16469 1 0 07:57:12 lft/1 0:00 ksh /usr/lpp/X11/bin/xinit
mary 19402 16260 20 09:37:21 pts/1 0:00 ps -ef
Die Spalten in der vorherigen Ausgabe sind wie folgt definiert:
Eintrag Beschreibung
USER Anmeldename des Benutzers
PID Prozess-ID
PPID Prozess-ID des Elternprozesses
C CPU (Auslastung durch den Prozess)
STIME Startzeit des Prozesses
TTY Workstationsteuerung für den Prozess
TIME Gesamte Ausführungszeit für den Prozess
CMD Befehl
Die Prozess-ID für den Befehl ps -ef im vorherigen Beispiel ist 19402. Die Prozess-ID des Elternprozesses (Befehl /bin/ksh) ist 16260.
Falls die Liste sehr umfangreich ist, verschiebt sich der obere Teil unter Umständen aus dem Sichtbereich. Wenn Sie die Liste seitenweise anzeigen möchten, müssen Sie den Befehl ps durch ein Pipe-Symbol mit dem Befehl pg verketten. Geben Sie an der Eingabeaufforderung Folgendes ein:
ps -ef | pg
Geben Sie Folgendes an der Eingabeaufforderung ein, um Statusinformationen zu allen auf dem System ausgeführten Prozessen anzuzeigen:
ps gv
Mit diesem Befehl wird eine Reihe von Statistiken für jeden aktiven Prozess aufgelistet. Die Ausgabe des Befehls sieht in etwa wie folgt aus:
PID TTY STAT TIME PGIN SIZE RSS LIM TSIZ TRS %CPU %MEM COMMAND
0 - A 0:44 7 8 8 xx 0 0 0.0 0.0 swapper
1 - A 1:29 518 244 140 xx 21 24 0.1 1.0 /etc/init
771 - A 1:22 0 16 16 xx 0 0 0.0 0.0 kproc
1028 - A 0:00 10 16 8 xx 0 0 0.0 0.0 kproc
1503 - A 0:33 127 16 8 xx 0 0 0.0 0.0 kproc
1679 - A 1:03 282 192 12 32768 130 0 0.7 0.0 pcidossvr
2089 - A 0:22 918 72 28 xx 1 4 0.0 0.0 /etc/sync
2784 - A 0:00 9 16 8 xx 0 0 0.0 0.0 kproc
2816 - A 5:59 6436 2664 616 8 852 156 0.4 4.0 /usr/lpp/
3115 - A 0:27 955 264 128 xx 39 36 0.0 1.0 /usr/lib/
3451 - A 0:00 0 16 8 xx 0 0 0.0 0.0 kproc
3812 - A 0:00 21 128 12 32768 34 0 0.0 0.0 usr/lib/lpd/
3970 - A 0:00 0 16 8 xx 0 0 0.0 0.0 kproc
4267 - A 0:01 169 132 72 32768 16 16 0.0 0.0 /etc/sysl
4514 lft/0 A 0:00 60 200 72 xx 39 60 0.0 0.0 /etc/gett
4776 pts/3 A 0:02 250 108 280 8 303 268 0.0 2.0 -ksh
5050 - A 0:09 1200 424 132 32768 243 56 0.0 1.0 /usr/sbin
5322 - A 0:27 1299 156 192 xx 24 24 0.0 1.0 /etc/cron
5590 - A 0:00 2 100 12 32768 11 0 0.0 0.0 /etc/writ
5749 - A 0:00 0 208 12 xx 13 0 0.0 0.0 /usr/lpp/
6111 - T 0:00 66 108 12 32768 47 0 0.0 0.0 /usr/lpp/
Einfache Prozess-Auswahl
-A wählt alle Prozesse aus, identisch mit -e
-N oder
--deselect wählt alle Prozesse aus, die die angegebenen Bedingungen nicht erfüllen (negiert die Auswahl)
T wählt alle Prozesse die mit dem aktuellen Terminal verbunden sind aus. Identisch der t Option, ohne jedes Argument
-a wählt alle Prozesse, außer den Session-Leitern und Prozessen, die nicht mit einem Terminal verbunden sind, aus
a hebt die BSD-Stil "nur du selbst" Beschränkung auf, die durch die Verwendung von BSD-Optionen auf die Auswahl der Prozesse angewendet wird. Diese Option listet also alle Prozesse eines Terminals
-d wählt alle Prozesse außer Session-Leitern aus
-e wählt alle Prozesse aus, identisch mit -A
r beschränkt die Auswahl auf laufende Prozesse
-C PROZESSLISTE zeigt nur die Prozesse an, die in PROZESSLISTE aufgeführt sind.
x hebt die BSD-Stil "muss ein tty haben" Beschränkung auf, die durch die Verwendung von BSD-Optionen angewendet wird Diese Option listet also alle Prozesse, die dem aufrufenden Benutzer gehören
-f erzeugt eine detailliertere Ausgabe
-F erzeugt eine noch detailliertere Ausgabe
Vollständige Prozessliste
Alle Prozesse unter Verwendung der Standard-Syntax anzeigen lassen:
ps -e
Das gleiche unter Verwendung der BSD-Syntax:
ps ax
Will man erweiterte Informationen erhalten, so erreicht man das mit
ps -eF
bzw.
ps aux
Prozessliste filtern
Oftmals werden Befehle der Form
ps aux | grep einprogramm
empfohlen, um herauszufinden ob einprogramm läuft. Diese Syntax sollte man jedoch vermeiden, da sich hierbei grep einprogramm selbst findet. Die korrekte Alternative lautet
ps -fC einprogramm
Man kann auch mittels
ps -fC einprogramm,nocheinprogramm,undnocheins
gleichzeitig nach mehreren Prozessen suchen.
Prozessbaum
Einen Prozessbaum anzeigen:
ps -ejH
(oder mit BSD-Syntax):
ps axjf
Grafisch schöner ist die Ausgabe, wenn pstree verwendet wird.
In Linux werden Informationen über alle laufenden Prozesse im Verzeichnis /proc gespeichert. Dieses Verzeichnis enthält virtuelle Dateien, die als Schnittstelle dienen, um auf Prozessinformationen zuzugreifen. Jeder Prozess hat ein eigenes Unterverzeichnis innerhalb von /proc, das nach seiner Prozesskennung (PID) benannt ist.
Diese “Dateien” im /proc-Verzeichnis repräsentieren die Prozesse und enthalten Informationen wie PID, Status, Ressourcennutzung, Befehlszeilenargumente und vieles mehr. Durch das Lesen und Schreiben in diese virtuellen Dateien können Benutzeranwendungen und Systemdienste Informationen über Prozesse abrufen oder ändern.
Durch die Verwendung von /proc als Speicherort für Prozessinformationen wird eine einheitliche Schnittstelle geschaffen, die es ermöglicht, auf Prozesse zuzugreifen, unabhängig davon, ob sie Benutzeranwendungen oder Systemdienste sind. Dies erleichtert die Überwachung, Steuerung und Kommunikation zwischen den laufenden Prozessen und dem System.
Die Prozesshierarchie bezieht sich auf die organisierte Struktur von Prozessen in einem Betriebssystem. In einem typischen Betriebssystem, wie z.B. Unix oder Windows, werden Programme als Prozesse ausgeführt.
Diese Prozesse können wiederum andere Prozesse starten, was zu einer Hierarchie von Prozessen führt. Die übergeordneten Prozesse werden als Elternprozesse bezeichnet, während die von ihnen gestarteten Prozesse als Kindprozesse bezeichnet werden. Diese Hierarchie ermöglicht es, komplexe Aufgaben in kleinere, leichter zu verwaltende Teile zu unterteilen und die Ressourcennutzung effizient zu organisieren.
Die Elternprozesse können die Aktivitäten und Ressourcen der Kindprozesse überwachen und steuern, und wenn ein Elternprozess beendet wird, werden in der Regel auch seine Kindprozesse beendet. Die Prozesshierarchie ist ein grundlegendes Konzept in der Betriebssystemarchitektur und spielt eine wichtige Rolle bei der Verwaltung und Organisation von Prozessesen.
Was bedeutet der Prozess-Status?
Der Status eines Prozesses sagt aus, ob dieser derzeit aktiv ist oder nicht. Es gibt vier Status, die ein Prozess haben kann:
Läuft: Prozesse, die derzeit Arbeit erledigen (zum Beispiel ein Web-Browser, der eine Seite aufbaut). Laufende Prozesse sind jene, welche aktiv den Prozessor (CPU) verwenden.
Schläft: Prozesse, die derzeit keine Arbeit erledigen (wenn sie zum Beispiel auf ein Ereignis warten). Sie nutzen keine Prozessorzeit, belegen aber Arbeitsspeicher. Wenn sie etwas erledigen müssen, so »wachen sie auf« und wechseln in den Status Läuft.
Angehalten: Ein angehaltener Prozess wurde zuvor händisch gestoppt. Man hält gegebenenfalls einen Prozess vorübergehend an, wenn dieser zum Beispiel zu viel Rechenzeit belegt.
Zombie: Ein Zombie-Prozess ist bereits beendet und wird nie wieder starten, wird aber aus irgendeinem Grund in der Prozessliste behalten. Dies passiert normalerweise, weil er durch ein anderes Programm gestartet wurde und dieses wissen muss, ob er erfolgreich beendet hat oder nicht. Dies wurde aber noch nicht geprüft. Zombie-Prozesse belegen keinen Speicher und keine Prozessorzeit und verschwinden vermutlich irgendwann. Man muss nichts unternehmen, um sie loszuwerden.
Die Mehrheit der Prozesse läuft entweder oder schläft.
Der Begriff Prozesskontrolle umfasst folgende Kernelemente:
In Linux stehen uns hierfür verschiedene Mechanismen (bzw. Befehle) zur Verfügung.
top
zeigt eine dynamische Echtzeitübersicht über die
Prozesse an, die auf dem System ausgeführt werden. Es zeigt
Informationen wie CPU-Auslastung, Speicherverbrauch und laufende
Prozesse. Durch das Drücken von bestimmten Tasten können verschiedene
Sortierungen und Ansichten angezeigt werden.
ps
(Process Status) zeigt eine momentane Übersicht
über die aktiven Prozesse auf dem System. Es kann Informationen wie
Prozess-ID (PID), Benutzer, CPU-Auslastung, Speicherverbrauch und
Befehlszeile anzeigen.
[user@nixos:~]$ ps
PID TTY TIME CMD
5480 pts/0 00:00:00 bash
6305 pts/0 00:00:00 ps
pstree
stellt die Prozesshierarchie grafisch dar. Es
zeigt alle laufenden Prozesse als Baumstruktur an, wobei der
übergeordnete Prozess über seine untergeordneten Prozesse angeordnet
ist.
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ ├─dnsmasq
│ └─3*[{NetworkManager}]
├─accounts-daemon───2*[{accounts-daemon}]
├─agetty
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─colord───2*[{colord}]
pidof
gibt die Prozess-ID (PID) eines laufenden
Programms basierend auf dessen Namen zurück. pidof sucht nach dem PID
eines Prozesses basierend auf dessen Namen. Im Gegensatz zu pgrep, das
Optionen zur Feinabstimmung bietet, sucht pidof nur nach dem Namen des
Prozesses. pidof gibt normalerweise nur den PID des ersten gefundenen
Prozesses zurück.
[user@nixos:~]$ pidof bash
5480
pgrep
dient dazu, Prozess-IDs basierend auf ihrem
Namen oder anderen Attributen zu finden und auszugeben. pgrep durchsucht
die Prozessliste nach Prozessen, die einem bestimmten Muster
entsprechen, das als Argument übergeben wird. Es gibt verschiedene
Optionen für pgrep, um die Suche genauer anzupassen, z.B. nach dem
Benutzer, der den Prozess gestartet hat, nach dem Befehl oder der
Eingabeaufforderung des Prozesses usw. pgrep gibt eine Liste von PIDs
aus, die zu den gefundenen Prozessen passen.
[user@nixos:~]$ pgrep sleep
6539
7710
8456
kill
beendet Prozesse. Es sendet ein Signal an den
Prozess, um ihn zu beenden. Standardmäßig wird das SIGTERM-Signal
gesendet, welches den Prozess sozusagen “bittet” sich selbst zu beenden.
Mit verschiedenen Optionen können auch andere Signale gesendet
werden.
[user@nixos:~]$ kill 7378
[1]+ Terminated sleep 3600
pkill
erlaubt die Verwendung von regulären
Ausdrücken, um Prozesse basierend auf einem Muster im Prozessnamen zu
beenden. Es bietet auch die Möglichkeit, nach anderen Prozessattributen
wie Benutzername oder Prozessgruppe zu suchen. Zum Beispiel lassen sich
auch alle Prozess eines Users beenden:
[user@nixos:~]$ pkill -u user
killall
beendet Prozesse ausschließlich anhand ihres
exakten Namens, ohne die Möglichkeit zur Verwendung von regulären
Ausdrücken oder zum Suchen nach anderen Prozessattributen. Es werden
alle Prozesse mit gleichem Namen beendet.
[user@nixos:~]$ killall bash
&
hinter einem Befehl startet den Befehl als Job
im Hintergrund
[user@nixos:~]$ sleep 3600 &
[1] 7430
jobs
gibt eine Liste der aktuellen Jobs aus. Ein
“Job” bezieht sich normalerweise auf einen Prozess, der im Vordergrund
oder Hintergrund ausgeführt wird.
[user@nixos:~]$ jobs
[1]+ Running sleep 3600 &
fg
wird verwendet, um einen Prozess in den
Vordergrund zu bringen.
[user@nixos:~]$ sleep 3600 &
[1] 7430
[user@nixos:~]$ fg
sleep 3600
CTRL + z
kann verwendet werden, um einen laufenden
Prozess in den Hintergrund zu senden. Dies bedeutet, dass der Prozess
angehalten wird und in einem Zustand “gestoppt” ist. Er wird jedoch
nicht beendet, sondern stattdessen in den Hintergrund verschoben, und
die Shell kehrt zum Eingabeaufforderung zurück.
[user@nixos:~]$ fg
sleep 3600
^Z
[1]+ Stopped sleep 3600
bg
wird verwendet, um einen Prozess im Hintergrund
laufen zu lassen. Es nimmt einen Prozess, der im Vordergrund pausiert
oder gestoppt wurde, und führt ihn im Hintergrund fort.
[user@nixos:~]$ bg
[1]+ sleep 3600 &
nice
startet einen Prozess mit einer vorgegebenen
Priorität, z.b. einer Priorität von 10:
[user@nixos:~]$ nice -n 10 sleep 3600 &
[3] 8062
[user@nixos:~]$ ps -p 8062 -o pid,ni,cmd
PID NI CMD
8062 10 sleep 3600
renice
ändert die Priorität eines laufenden
Prozesses.
[user@nixos:~]$ sudo renice -n 5 -p 8062
[sudo] password for user:
8062 (process ID) old priority 10, new priority 5
[user@nixos:~]$ ps -p 8062 -o pid,ni,cmd
PID NI CMD
8062 5 sleep 3600
nohup
Mit nohup (No Hang Up) können Prozesse
gestartet werden, die auch dann fortgesetzt werden, wenn die Verbindung
zur Shell unterbrochen wird. Stirbt der Parent Prozess bzw. die shell,
wird der mit nohup gestartete Prozess im Prozessbaum umgehängt. Dabei
wird die Standardausgabe auf eine Datei namens nohup.out umgeleitet,
falls keine andere Datei angegeben ist.
[user@nixos:~]$ nohup sleep 3600 &
[4] 8236
[user@nixos:~]$ nohup: ignoring input and appending output to 'nohup.out'
disown
entkoppelt einen bereits laufenden job von
der aktuellen shell.
[user@nixos:~]$ sleep 3600 &
[5] 9317
[user@nixos:~]$ disown 9317
In Linux können Prozesse im Hintergrund ausgeführt werden, was bedeutet, dass sie ohne direkte Interaktion des Benutzers laufen.
Der Befehl nohup
steht für “no hang up” und wird
verwendet, um einen Prozess so zu starten, dass er auch dann
weiterläuft, wenn die Verbindung zum Terminal unterbrochen wird oder das
Terminal geschlossen wird.
Beispiel:
nohup ./mein_programm &
Strg + Z und bg: Man kann einen laufenden
Prozess unterbrechen, indem man Strg + Z
drückst, und dann
den Prozess mit dem Befehl bg
im Hintergrund
fortsetzen.
Beispiel:
[Strg + Z]
bg
Das Ausführen von Prozessen im Hintergrund ist nützlich, wenn man das Terminal für andere Aufgaben nutzen möchte, während ein Programm im Hintergrund läuft, oder wenn man sicherstellen möchte, dass ein Programm auch nach dem Schließen des Terminals weiterläuft.
Um einen Prozess vom Hintergrund in den Vordergrund zu holen, kann
man den Befehl fg
(Foreground) verwenden.
Aktive Hintergrundjobs anzeigen: Zuerst sollte
man alle aktiven Hintergrundjobs anzeigen lassen. Man kann dies tun,
indem man den Befehl jobs
eingibst.
Hintergrundjob in den Vordergrund holen: Job
auswählen, den man in den Vordergrund bringen möchte, und der Verwendung
von der Job-ID mit dem Befehl fg
.
Beispiel:
Beispiel: ```bash jobs fg %1
Hier ist %1 die Job-ID des Hintergrundjobs. Man kann auch den Namen des Jobs verwenden, wenn man ihn kennt.
Durch diesen Befehl wird der ausgewählte Job in den Vordergrund geholt, und man kann direkt mit ihm interagieren.
# Programm starten "mein_programm" im Hintergrund mit nohup
nohup ./mein_programm &
# Bestätigungsnachricht, dass das Programm gestartet wurde
[1] 1234
# Überprüfung der aktiven Hintergrundjobs
jobs
# Ergebnis der jobs-Befehlsausgabe
[1]+ Running nohup ./mein_programm &
# Unterbrecheung des Prozesses und verschiebung in den Hintergrund mit Strg + Z
^Z
[1]+ Stopped nohup ./mein_programm
# Überprüfung der aktiven Hintergrundjobs
jobs
# Ergebnis der jobs-Befehlsausgabe
[1]+ Stopped nohup ./mein_programm
# Hintergrundjob in den Vordergrund mit bg holen
bg
# Bestätigungsnachricht, dass der Prozess wieder im Hintergrund läuft
[1]+ nohup ./mein_programm &
# Hintergrundjob wieder in den Vordergrund mit fg holen
fg
# Bestätigungsnachricht, dass der Prozess wieder im Vordergrund ist
./mein_programm
Die Datei /proc/pid/status ist eine virtuelle Datei im Linux-Betriebssystem, die Informationen über den Status eines bestimmten Prozesses mit der Prozesskennung (PID) pid enthält. Diese Informationen sind nützlich, um den aktuellen Zustand, die Ressourcennutzung und andere Details eines laufenden Prozesses zu überwachen.
Hier sind einige Beispiele dafür, was man in der Datei /proc/pid/status finden kann:
Der Name des Prozesses wird unter der Zeile “Name:” aufgelistet. Zum Beispiel: Name: bash
Der Status des Prozesses wird unter der Zeile “State:” angezeigt. Zum Beispiel: State: S (sleeping)
Die Gruppenzugehörigkeit des Prozesses wird unter “Gid:” aufgeführt. Zum Beispiel: Gid: 1000 1000 1000 1000
Die Benutzer-ID des Prozesses wird unter “Uid:” aufgeführt. Zum Beispiel: Uid: 1000 1000 1000 1000
Informationen zum Speicherverbrauch des Prozesses sind unter “VmSize” und “VmRSS” aufgeführt. Zum Beispiel: VmSize: 1840 kB VmRSS: 316 kB
Die Priorität des Prozesses wird unter “Priority:” aufgelistet. Zum Beispiel: Priority: 20
Hier sind weitere Details zur /proc/pid/status-Datei und was sie enthält:
Die Prozesskennung (PID) und die Kennung des Elternprozesses (PPID) geben die Identifikation des Prozesses und seines Elternprozesses an. Zum Beispiel: PID: 1234 PPID: 5678
Neben “VmSize” und “VmRSS” enthält die Datei auch Informationen über den virtuellen Speicher des Prozesses, wie beispielsweise “VmPeak” (maximal belegter virtueller Speicher), “VmSwap” (belegter Swap-Speicher) und andere. Diese Informationen helfen dabei, den Speicherverbrauch des Prozesses zu überwachen.
Informationen zur CPU-Auslastung des Prozesses sind ebenfalls verfügbar, einschließlich der CPU-Zeit, die der Prozess verwendet hat.
Die Berechtigungen und Zugriffsrechte des Prozesses werden in der Datei aufgelistet, einschließlich der Benutzer- und Gruppen-ID des Prozesses sowie der Berechtigungen für Lesen, Schreiben und Ausführen.
Informationen über die Signale, die der Prozess empfangen hat oder auf die er wartet, sind ebenfalls enthalten. Dies umfasst Signale wie SIGINT (Interrupt), SIGTERM (Beenden) und andere.
Falls der Prozess aus mehreren Threads besteht, werden Informationen zu den Threads und deren Zustand ebenfalls in der Datei aufgeführt.
Die Datei /proc/pid/status enthält auch Informationen über die aktuelle Dateiposition für den Prozess, was insbesondere für Prozesse relevant ist, die Dateien lesen oder schreiben.
Der Befehl “top” in Linux wird verwendet, um eine dynamische Übersicht über die Prozesse auf einem System anzuzeigen. Es zeigt Informationen wie CPU-Auslastung, Speicherverbrauch und laufende Prozesse in Echtzeit an. “top” aktualisiert sich automatisch in regelmäßigen Abständen und ermöglicht es Benutzern, Prozesse zu überwachen und Engpässe im System zu identifizieren.
Die einzelnen Prozesse, die vom Befehl “top” angezeigt werden, enthalten verschiedene Informationen, darunter: 1. PID (Prozess-ID): Eine eindeutige Nummer, die jedem Prozess zugewiesen wird. 2. Benutzer: Der Benutzer, unter dem der Prozess läuft. 3. PR (Priorität): Die Priorität des Prozesses. 4. NI (Nice-Wert): Der “Nice”-Wert des Prozesses, der seine Priorität relativ zur Standardpriorität anpasst. 5. VIRT (Virtueller Speicher): Die Größe des virtuellen Speichers, den der Prozess belegt. 6. RES (Residenter Speicher): Die Größe des physikalischen Speichers, den der Prozess tatsächlich verwendet. 7. SHR (Gemeinsamer Speicher): Die Größe des gemeinsam genutzten Speichers des Prozesses. 8. S (Status): Der Status des Prozesses (z.B. “R” für laufend, “S” für schlafend). 9. %CPU: Die Prozessorauslastung, die der Prozess verursacht. 10. %MEM: Der Speicherverbrauch des Prozesses in Bezug auf den gesamten verfügbaren Speicher. 11. Zeit (TIME+): Die CPU-Zeit, die der Prozess bisher verwendet hat. 12. Befehl: Der Name des Programms oder des Befehls, der den Prozess gestartet hat.
Diese Informationen ermöglichen es Benutzern, die Leistung des Systems zu überwachen und Ressourcenauslastung zu identifizieren.
Der Befehl kill
in Linux wird verwendet, um Prozesse zu
beenden. Es ist ein wichtiges Werkzeug für die Prozessverwaltung auf
einem Linux-System. Hier sind einige wichtige Punkte über den
Befehl:
Syntax: Die grundlegende Syntax des Befehls lautet:
kill [Optionen] PID
PID (Prozess-ID): PID ist die eindeutige Kennung
für einen Prozess. Sie können die PID eines Prozesses mit Befehlen wie
ps
(Prozessstatus) oder pgrep
(Prozess suchen)
herausfinden.
Optionen: kill
sendet Signale an
den Zielprozess. Das Standard-Signal ist SIGTERM. Sie
können jedoch verschiedene Signale senden, um unterschiedliche
Verhaltensweisen des Prozesses zu erzielen. Einige häufig verwendete
Optionen des Befehls kill
sind:
Optionen | Beschreibung |
---|---|
-TERM oder -15 | Sendet ein SIGTERM-Signal, was dazu führt, dass der Prozess sanft beendet wird. Bei default wird kill ohne signalnummer ist wie kill -15 ausgeführt |
-KILL oder -9 | Sendet ein SIGKILL-Signal, was dazu führt, dass der Prozess sofort beendet wird, ohne die Möglichkeit für eine ordnungsgemäße Beendigung. |
-HUP oder -1 | Sendet ein SIGHUP-Signal, um einem Prozess anzuzeigen, dass er sich neu initialisieren oder neu starten soll. Historisch gesehen wurde es oft verwendet, um Prozessen mitzuteilen, dass sie sich neu verbinden sollen, z. B. nachdem ein Terminal geschlossen wurde. Einige Dienste und Prozesse reagieren auf SIGHUP, indem sie ihre Konfiguration neu laden oder sich neu starten. |
-INT oder -2 | Sendet ein SIGINT-Signal, um einem Prozess anzuzeigen, dass er
unterbrochen werden soll. Dies ist das Signal, das normalerweise an
einen Prozess gesendet wird, wenn Sie Ctrl + C in einem
Terminal verwenden, um einen laufenden Prozess zu beenden. Die meisten
Programme reagieren auf SIGINT, indem sie sich ordnungsgemäß
beenden. |
-STOP oder -19 | Sendet ein SIGSTOP-Signal um einen Prozess anzuhalten, ohne ihn zu
beenden. Dies ist das Signal, das normalerweise an einen Prozess
gesendet wird, wenn Sie Ctrl + z in einem Terminal
verwenden. So wird er in seinem aktuellen Zustand angehalten und hält
die Ausführung an, bis ein anderes Signal empfangen wird, das ihn
fortsetzt. |
-CONT oder -18 | Sendet ein SIGCONT-Signal, um einen zuvor angehaltenen Prozess fortzusetzen, der mit SIGSTOP oder einem ähnlichen Signal angehalten wurde. Wenn ein Prozess mit SIGSTOP angehalten wurde, können Sie SIGCONT senden, um ihn wieder in Ausführung zu versetzen, wodurch er seinen vorherigen Zustand fortsetzt. |
-q | Diese Option sendet das Signal in die Warteschlange des Prozesses, anstatt es sofort auszuführen. Dies kann in Situationen nützlich sein, in denen ein Prozess gerade blockiert ist und das Signal später empfangen soll, wenn er wieder betriebsbereit ist. |
-p | Diese Option können Sie eine Datei angeben, die die
PID des zu beendenden Prozesses enthält. Dies ist
nützlich, wenn Sie die PID in einer Datei speichern und
dann kill verwenden möchten, um den Prozess zu
beenden. |
-a | Diese Option bewirkt, dass kill das Signal an alle
Prozesse sendet, die mit Ihrem Benutzerkontext verbunden sind. Dies
sollte mit äußerster Vorsicht verwendet werden, da es dazu führen kann,
dass alle laufenden Prozesse beendet werden, was das System abstürzen
lassen könnte. |
-s | Sendet ein SIGNAL-signal Diese Option ermöglicht es Ihnen, ein bestimmtes Signal anzugeben, das an den Zielprozess gesendet werden soll. Zum Beispiel: |
kill -s SIGUSR1 PID
Dieser Befehl sendet das Signal SIGUSR1 an den Prozess mit der angegebenen PID.
Die oben genannten Optionen bieten zusätzliche Flexibilität beim
Einsatz des kill
Befehls in Linux und ermöglichen eine
präzisere Steuerung der Prozessbeendigung.
Berechtigungen:
Um den Befehl kill
auf Prozesse anzuwenden, benötigen
Sie in der Regel die entsprechenden Berechtigungen. Sie können Prozesse
beenden, die Ihrem Benutzerkontext gehören, oder mit ausreichenden
Berechtigungen Prozesse anderer Benutzer beenden.
Prozesseignung:
Sie sollten den Befehl kill
mit Vorsicht verwenden,
insbesondere wenn Sie Prozesse beenden, die für das System oder andere
Benutzer kritisch sind. Ein unsachgemäßer Gebrauch kann zu Datenverlust
oder Systeminstabilität führen.
Die Befehle pkill
und killall
haben beide
den Zweck, Prozesse auf einem Linux-System zu beenden, aber es gibt
einige wichtige Unterschiede zwischen ihnen:
Ziel der Prozessbeendigung:
pkill
: können Sie Prozesse anhand ihres Namens oder
anderer Attribute beenden. Es verwendet reguläre Ausdrücke, um passende
Prozesse zu finden und diese dann zu beenden.
killall
: Im Gegensatz dazu beendet killall Prozesse
anhand ihres Namens, jedoch ohne reguläre Ausdrücke zu verwenden. Es
beendet alle Prozesse mit einem bestimmten Namen, ohne nach anderen
Attributen zu suchen.
Verwendung von regulären Ausdrücken:
pkill
: Ermöglicht die Verwendung von regulären
Ausdrücken, um Prozesse anhand ihres Namens oder anderer Attribute zu
finden. Dies ermöglicht eine präzisere Auswahl der zu beendenden
Prozesse.killall
: Verwendet keine regulären Ausdrücke. Es sucht
nur nach Prozessen mit einem genauen Namen, der angegeben wurde.Unterstützung von Benutzerkontexten:
pkill
: Erlaubt die Spezifizierung des
Benutzerkontexts, in dem nach Prozessen gesucht werden soll. Sie können
beispielsweise nach Prozessen suchen, die einem bestimmten Benutzer
gehören.
killall
: Unterstützt keine direkte Spezifizierung
des Benutzerkontexts. Es beendet Prozesse unabhängig davon, wem sie
gehören.
Plattformabhängigkeit:
pkill
: Ist auf den meisten modernen
Linux-Distributionen verfügbar und wird von den meisten Distributionen
als Standardwerkzeug bereitgestellt.killall
: Ist möglicherweise nicht auf allen
Linux-Distributionen vorhanden oder möglicherweise nicht standardmäßig
installiert. In einigen Distributionen könnte es auch eine andere
Funktion haben (z. B. killall in FreeBSD, das verwendet wird, um
Prozesse anhand ihres Befehlsnamens zu beenden).Insgesamt bieten pkill
und killall
ähnliche
Funktionen, aber pkill
ist flexibler und leistungsfähiger,
da es reguläre Ausdrücke und Benutzerkontexte unterstützt. Die Wahl
zwischen den beiden hängt von den spezifischen Anforderungen und
Vorlieben des Benutzers ab.