Von einem task_struct
Perspektive haben die Threads eines Prozesses denselben Thread-Gruppenleiter (group_leader
in task_struct
), während untergeordnete Prozesse einen anderen Thread-Gruppenleiter haben (jeder einzelne untergeordnete Prozess).
Diese Informationen werden dem Userspace über zugänglich gemacht die /proc
Dateisystem. Sie können Eltern und Kinder verfolgen, indem Sie auf ppid
schauen Feld in /proc/${pid}/stat
oder .../status
(dies ergibt die Eltern-PID); Sie können Threads verfolgen, indem Sie sich tgid
ansehen Feld in .../status
(Dies ergibt die Thread-Gruppen-ID, die auch die PID des Gruppenleiters ist). Die Threads eines Prozesses werden im /proc/${pid}/task
sichtbar gemacht Verzeichnis:Jeder Thread erhält sein eigenes Unterverzeichnis. (Jeder Prozess hat mindestens einen Thread.)
In der Praxis Programme, die ihre eigenen Threads im Auge behalten möchten würden sich auf APIs verlassen, die von der von ihnen verwendeten Threading-Bibliothek bereitgestellt werden, anstatt betriebssystemspezifische Informationen zu verwenden. Typischerweise auf Unix-ähnlichen Systemen bedeutet das die Verwendung von pthreads.
-
Dies führt den
top
aus Befehl mit einigen zusätzlichen Optionen:top -H -b -n 1
- Die
-H
Das Argument weist top an, jeden einzelnen Thread anzuzeigen. Normalerweise fasst top alle Threads unter ihrem übergeordneten Prozess zusammen. - Die
-b
Das Argument lässt top im Stapelmodus laufen – die Informationen werden gesammelt, angezeigt und dann auf stdout abgelegt, anstatt in einem interaktiven Modus ausgeführt und die angezeigten Daten aktualisiert zu werden. - Mit dem
-b
Option, der Benutzer muss top mitteilen, wie oft er ausgeführt werden soll, dies geschieht mit-n
Argument und ein abschließendes Argument, wie oft ausgeführt werden soll.
Also
top -H -b -n 1
weist das System an, „Top auszuführen, einzelne Threads anzuzeigen, im Stapelmodus auszuführen und nur einmal auszuführen“. - Die
-
Die
ps
Befehl meldet einen Schnappschuss der aktuell laufenden Prozesse.ps -eLf
Die
-eLf
Argument (kann als-e -L -f
verwendet werden auch) gliedert sich wie folgt:e
sagtps
um alle Prozesse anzuzeigen, unabhängig davon, wem sie gehören oder in welchem Status sie sich gerade befinden – aktiv, schlafend, pausiert, auf I/O wartend usw.L
sagtps
um einzelne Threads anzuzeigen- der
f
sagtps
um die Ausgabe als vollformatige Auflistung zu formatieren, und in Verbindung mitL
Argument werden die Spalten NLWP (Anzahl der Threads) und LWP (Thread-ID) zur Ausgabe hinzugefügt.