Prozesse: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
*[[Was ist ein Prozess?]]
 
*[[Was ist ein Prozess?]]
−
 
 
*[[Prozesstabelle (Anzeige mit ps)]]
 
*[[Prozesstabelle (Anzeige mit ps)]]
−
 
+
*[[Prozesse Eltern und Kinder]]
−
===Eltern und Kinder===
+
*[[Rechenzeit und Priorität]]
−
*Jeder Prozess kann weitere Prozesse erzeugen.
+
*[[Prozesse Signale]]
−
*Die erzeugten Prozesse bezeichnet man als Kindprozesse.
+
*[[Programme im Zusammenhang mit Prozessen]]
−
*Jeder Kindprozess weiß anhand der PPID, woher er stammt.
+
*[[Jobs]]
−
*Alle Prozesse sind von einem anderen Prozess gestartet worden, mit Ausnahme des Pseudoprozesses.
+
*[[Forkbomb]]
−
*Dieser hat die Prozessnummer 0. Er hat die Aufgabe, den Init Prozess zustarten.
 
−
*In neuen Linux Distributionen ist dies '''systemd'''.
 
−
*Es gibt zwei Arten wie ein Prozess gestartet werden kann:
 
−
# Fork und Exec: Prozessumgebung wird dupliziert, der neue Prozess bekommt eine eigene neue PID
 
−
# Exec: Alter Prozess wird durch neuen Prozess überladen (geht mit dem shell-buildin exec)
 
−
{{#drawio:fork-exex}}
 
−
 
 
−
 
 
−
 
 
−
 
 
−
'''Rechte auf Objekte UID GID'''
 
−
Ob ein Prozess auf eine Datei zugreifen kann, entscheidet der Kernel anhand der
 
−
Zugriffssrechte, die auf der Datei gesetzt sind. Er checkt anhand der UID und GID
 
−
des Prozesses, ob es erlaubt ist. Mit dieser Technik wird letztendlich geprüft, was
 
−
ein User darf, und was nicht.
 
−
 
 
−
===Rechenzeit und Priorität===
 
−
Da auch bei Prozessen eine Gerechtigkeit herschen muss, muss eine Instanz
 
−
darüber entscheiden wie lange ein Prozess Rechenzeit verbrauchen darf.
 
−
Folgende Kenndaten werden dazu benötigt
 
−
* clocktick = Zeiteinheit
 
−
* n = Faktor über den Kernel einstellbar
 
−
* slice = n <nowiki>*</nowiki> clocktick
 
−
* agingtime = weitere Zeiteinheit über den Kernel einstellbar
 
−
 
 
−
Es wird davon ausgegangen das der Prozess mit der niedrigsten Priorität gerade
 
−
rechnet. Pro clocktick erhöht sich die Priorität dieses Prozesses um eins.
 
−
 
 
−
Jetzt können 3 Situationen eintreten die alle dazu führen das der Scheduler
 
−
aufgerufen wird.
 
−
 
 
−
# Prozess blockiert wegen einer Ausgabe oder Eingabe.
 
−
# Gibt Rechenzeit freiwillig ab.
 
−
# Der Slice endet.
 
−
 
 
−
Der Aufruf des Schedulers bewirkt das der Prozess mit der niedrigsten Priorität
 
−
gescheduled wird, er also nun rechnen darf. Nach Ablauf der agingtime werden
 
−
nun die Prozesse "gealtert". Das geschieht nach folgender Formel
 
−
 
 
−
Neue Priorität = Alte Priorität / 2 + Nicewert
 
−
 
 
−
Der User hat die Möglichkeit, über den sogenannten Nicewert den Grundwert für
 
−
einen Prozess zu senken. Der Prozess braucht dann länger für seine Abarbeitung.
 
−
Er verhält sich somit netter zu den anderen Prozessen. Normale User können nur
 
−
netter werden, der Systemverwalter kann auch nicht netter (gemeiner) werden. Der
 
−
Bereich liegt zwischen 19 (sehr nett) bis 0 (weniger nett) für die User, und 19 bis
 
−
-20 für root.
 
−
 
 
−
 
 
−
'''Signale'''
 
−
 
 
−
Mit den Kommando kill und killall kann man Prozessen Signale schicken
 
−
 
 
−
kill -Signalnummer PID
 
−
 
 
−
Signalnummer
 
−
{| border=1 cellpadding=2
 
−
!Signalname
 
−
!Wert
 
−
!Aktion
 
−
|-
 
−
|SIGHUP
 
−
|1
 
−
|Neuinitialisierung eines Prozesses
 
−
|-
 
−
|SIGINT
 
−
|2
 
−
|Interrupt-Signal von der Tastatur (STRG+c)
 
−
|-
 
−
|SIGQUIT
 
−
|3
 
−
|Interrupt-Signal von der Tastatur (STRG+c) mit Dump
 
−
|-
 
−
|SIGKILL
 
−
|9
 
−
|unwiderrufliches Beendigungssignal (Töten)
 
−
|-
 
−
|SIGSEGV
 
−
|11
 
−
|Ungültige Speicherreferenz (bedeutet oft auf defekten Speicher)
 
−
|-
 
−
|SIGTERM
 
−
|15
 
−
|Beendigungssignal (geöffnete Dateien werden geschlossen)
 
−
|-
 
−
|SIGCONT
 
−
|18
 
−
|Weiterfahren, wenn gestoppt
 
−
|-
 
−
|SIGSTOP
 
−
|19
 
−
|Prozessstop
 
−
|}
 
−
 
 
−
Beispiel
 
−
* kill -1 7562
 
−
 
 
−
===Programme im Zusammenhang mit Prozessen===
 
−
====ps: Zeigt die Prozesse mit ihrem Status an====
 
−
 
 
−
*[[ps]]
 
−
 
 
−
====pgrep: Zeigt die PID zu einem Prozess an====
 
−
*zeigt alle Prozesse an die auf die das Muster
 
−
*pgrep mc
 
−
  13552
 
−
  13734
 
−
*zeigt nur die an die einem User gehören
 
−
pgrep -u thomas mc
 
−
  13552
 
−
zeigt denn vollständigen Prozessnamen an
 
−
pgrep -l apa
 
−
  1427 apache2
 
−
  1428 apache2
 
−
  1429 apache2
 
−
  6710 apache2
 
−
zeigt den zuletzt gestarteten Prozess
 
−
pgrep -n apa
 
−
  1429
 
−
zeigt nur Prozesse an die genau auf den Namen passen
 
−
pgrep -x apache2
 
−
  1427
 
−
  1428
 
−
  1429
 
−
  6710
 
−
====pkill: schickt einem Prozess anhand des Namens ein Signal====
 
−
beendet den Prozess
 
−
  pkill -x apache2
 
−
beendet den Prozess der als erstes gestartet wurde
 
−
  pkill -xo mc
 
−
 
 
−
====nice: Lässt ein Programm mit verändertem Grundwert der Priorität laufen====
 
−
*nice
 
−
0
 
−
nice -n 9 bash
 
−
nice
 
−
9
 
−
*
 
−
 
 
−
====renice: Ändert den Grundwert der Priorität eines laufenden Prozesses====
 
−
renice 10 5742
 
−
  5742: Alte Priorität: 0, neue Priorität: 10
 
−
 
 
−
====top: Zeigt die Prozesse mit ihrem Status an (Abbrechen mit q)====
 
−
top
 
−
  top - 08:51:08 up 20 min,  1 user,  load average: 0.00, 0.02, 0.06
 
−
  Tasks:  93 total,  1 running,  92 sleeping,  0 stopped,  0 zombie
 
−
  Cpu(s):  1.6%us,  3.1%sy,  0.1%ni, 84.9%id, 10.2%wa,  0.0%hi,  0.2%si,  0.0%st
 
−
  Mem:    509504k total,  273948k used,  235556k free,    11312k buffers
 
−
  Swap:  321260k total,        0k used,  321260k free,  118380k cached
 
−
 
−
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                     
 
−
  2208 mysql    20  0  125m  21m 5552 S  1.7  4.2  0:02.29 mysqld                                                                       
 
−
  3201 root      20  0  2444 1064  828 R  1.7  0.2  0:00.04 top                                                                         
 
−
      1 root      20  0  1908  780  564 S  0.0  0.2  0:02.19 init                                                                         
 
−
      2 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kthreadd                                                                     
 
−
      3 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 migration/0                                                                 
 
−
      4 root      15  -5    0    0    0 S  0.0  0.0  0:00.03 ksoftirqd/0                                                                 
 
−
      5 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 watchdog/0                                                                   
 
−
      6 root      15  -5    0    0    0 S  0.0  0.0  0:00.04 events/0                                                                     
 
−
      7 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 khelper                                                                     
 
−
      8 root      RT  -5    0    0    0 S  0.0  0.0  0:00.00 kstop/0                                                                     
 
−
      9 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kintegrityd/0                                                               
 
−
    10 root      15  -5    0    0    0 S  0.0  0.0  0:00.03 kblockd/0                                                                   
 
−
    11 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kacpid                                                                       
 
−
    12 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 kacpi_notify                                                                 
 
−
    13 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 cqueue                                                                       
 
−
    14 root      15  -5    0    0    0 S  0.0  0.0  0:00.53 ata/0                                                                       
 
−
    15 root      15  -5    0    0    0 S  0.0  0.0  0:00.00 ata_aux
 
−
 
 
−
Kommandos
 
−
 
 
−
h - Hilfe
 
−
u - User
 
−
k - Kill
 
−
r - Renice
 
−
d - Delay (Default 3s)
 
−
n - Tasks (Default unbegrenzt)
 
−
W - Schreibe aktuelle Konfiguration in Datei
 
−
q - Quit
 
−
 
 
−
==pstree: Zeigt die Prozesse als Baumstruktur==
 
−
Mit -p werden auch die PID's ausgegeben
 
−
pstree
 
−
init─┬─NetworkManager
 
−
      ├─acpid
 
−
      ├─apache2───5*[apache2]
 
−
      ├─atd
 
−
      ├─bluetoothd
 
−
      ├─console-kit-dae───63*[{console-kit-dae}]
 
−
      ├─cron
 
−
      ├─cupsd
 
−
      ├─dbus-daemon
 
−
      ├─dd
 
−
      ├─gdm───gdm─┬─Xorg
 
−
      │          └─gdmgreeter
 
−
      ├─6*[getty]
 
−
      ├─hald───hald-runner─┬─hald-addon-acpi
 
−
      │                    ├─hald-addon-inpu
 
−
      │                    └─2*[hald-addon-stor]
 
−
      ├─klogd
 
−
      ├─nm-system-setti
 
−
      ├─nmbd
 
−
      ├─nscd───11*[{nscd}]
 
−
      ├─portmap
 
−
      ├─rpc.statd
 
−
      ├─slapd───2*[{slapd}]
 
−
      ├─smbd───smbd
 
−
      ├─sshd───sshd───bash───bash───pstree
 
−
      ├─syslogd
 
−
      ├─system-tools-ba
 
−
      ├─udevd
 
−
      ├─winbindd─┬─winbindd───winbindd
 
−
      │          └─3*[winbindd]
 
−
      └─wpa_supplicant
 
−
 
 
−
===Jobs===
 
−
Unter einem Job versteht man ein Programm, welches man von der Shell gelöst
 
−
hat. D. h. man kann ganz normal weiter arbeiten und der Job verrichtet seinen
 
−
Dienst im Hintergrund. Man kann jederzeit zu diesem Job wieder Kontakt
 
−
aufnehmen.
 
−
 
 
−
Ein Job kann auf 2 Arten gestarten werden:
 
−
 
 
−
# Durch Anhängen des & Zeichens beim Programmstart
 
−
*tail -f /var/log/messages &
 
−
Jun 19 06:59:31 zero -- MARK --
 
−
Jun 19 07:19:31 zero -- MARK --
 
−
Jun 19 07:39:32 zero -- MARK --
 
−
Jun 19 07:44:57 zero syslogd 1.5.0#5ubuntu3: restart.
 
−
Jun 19 07:59:32 zero -- MARK --
 
−
Jun 19 08:19:32 zero -- MARK --
 
−
Jun 19 08:39:32 zero -- MARK --
 
−
Jun 19 08:59:32 zero -- MARK --
 
−
Jun 19 09:19:33 zero -- MARK --
 
−
Jun 19 09:39:33 zero -- MARK --
 
−
[3] 27421
 
−
 
 
−
# Durch Stoppen des Prozesses durch Drücken von Strg-Z und in den Hintergrund schicken mit %n (n ist die Jobnummer)
 
−
*watch cat /proc/cpuinfo
 
−
Strg-Z
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
*bg %4
 
−
[4]+ watch cat /proc/cpuinfo &
 
−
 
 
−
Anweisungen im Zusammenhang mit Jobs (n ist die Jobnummer)
 
−
* bg %n : Einen Job in den Hintergrund stellen (wie oben)
 
−
* fg %n : Einen Job in den Vordergrund holen
 
−
* fg %4
 
−
watch cat /proc/cpuinfo
 
−
 
 
−
* jobs : Aktive Jobs ausgeben
 
−
 
 
−
*jobs
 
−
[1]   Running                tail -f /var/log/syslog &
 
−
[2]   Running                tail -f /var/log/syslog &
 
−
[3]-  Running                tail -f /var/log/messages &
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
 
 
−
* Strg-Z : Einen Vordergrund-Job vorübergehend anhalten
 
−
* kill -STOP %n : Unterbricht Job im Hintergrund
 
−
* kill -STOP %1
 
−
* jobs
 
−
[1]+  '''Stopped'''                tail -f /var/log/syslog
 
−
[2]   Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
* kill -CONT %n : Setzt den unterbrochenen Job im Hintergrund fort
 
−
* kill -CONT %1
 
−
* jobs
 
−
[1]+  '''Running'''                tail -f /var/log/syslog &
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
* kill -KILL %n : Tötet Job im Hintergrund
 
−
* kill -KILL %1
 
−
* jobs
 
−
[1]+  '''Killed'''                  tail -f /var/log/syslog
 
−
[2]   Running                tail -f /var/log/syslog &
 
−
[3]  Running                tail -f /var/log/messages &
 
−
[4]-  Stopped                watch cat /proc/cpuinfo
 
−
* jobs
 
−
[2]  Running                tail -f /var/log/syslog &
 
−
[3]-  Running                tail -f /var/log/messages &
 
−
[4]+  Stopped                watch cat /proc/cpuinfo
 
−
 
 
−
Bedingungen, die zu Jobausführung eingehalten werden sollen:
 
−
* Der Job soll nicht auf den Bildschirm schreiben (Standardausgabe +Standardfehlerkanal).
 
−
* Er soll keine Eingaben vom Benutzer erwarten.
 

Aktuelle Version vom 28. Januar 2026, 05:43 Uhr