Subroutine getthrds

Zweck

Ruft Kernel-Thread-Tabelleneinträge ab.

Bibliothek

Standard-C-Bibliothek (libc.a)

Syntax

#include <procinfo.h>
#include <sys/types.h>
int
getthrds ( ProcessIdentifier,  ThreadBuffer,  ThreadSize,  IndexPointer,  Count)
pid_t ProcessIdentifier;
struct thrdsinfo *ThreadBuffer;
or struct thrdsinfo64 *ThreadBuffer;
int ThreadSize;
tid_t *IndexPointer;
int Count;
int
getthrds64 ( ProcessIdentifier,  ThreadBuffer,  ThreadSize,  IndexPointer,  Count)
pid_t ProcessIdentifier;
struct thrdentry64 *ThreadBuffer;
int ThreadSize;
tid64_t *IndexPointer;
int Count;

Beschreibung

Die Subroutine getthrds gibt Informationen zu Kernel-Threads zurück, einschließlich Kernel-Thread-Tabelleninformationen, die durch die Struktur thrdsinfo oder thrdsinfo64 definiert sind.

Das Unterprogramm getthrds ruft bis zu Count Kernel-Thread-Tabelleneinträge ab, beginnend mit dem Eintrag, der dem durch IndexPointer angegebenen Thread-Identifikator entspricht, und legt sie in dem durch den ThreadBuffer angegebenen Array von thrdsinfo- oder thrdsinfo64 oder thrdentry64 ab.

Bei der Rückgabe wird die Kernel-Thread-ID, auf die IndexPointer verweist, aktualisiert, um den nächsten abzurufenden Kernel-Thread-Tabelleneintrag anzugeben. Die Subroutine getthrds gibt die Anzahl der abgerufenen Kernel-Thread-Tabelleneinträge zurück.

Wenn der Parameter ProcessIdentifier eine Prozesskennung angibt, werden nur Kernel-Threads berücksichtigt, die zu diesem Prozess gehören. Wenn dieser Parameter auf -1 gesetzt ist, werden alle Kernel-Threads berücksichtigt.

Die Subroutine getthrds wird normalerweise wiederholt in einer Schleife aufgerufen, beginnend mit der Kernel-Thread-ID null und in einer Schleife, bis der Rückgabewert kleiner als Anzahlist. Dies bedeutet, dass keine weiteren Einträge zum Abrufen vorhanden sind.

  1. Verwenden Sie keine Informationen aus der Struktur procsinfo (siehe Subroutine getprocs ), um den Wert des Parameters Count zu ermitteln; Ein Prozess kann Kernel-Threads im Intervall zwischen einem Aufruf von getprocs und einem nachfolgenden Aufruf von getthrdserstellen oder löschen.
  2. Die Kernel-Thread-Tabelle kann sich ändern, während die Subroutine getthrds darauf zugreift. Zurückgegebene Einträge sind immer konsistent, aber da Kernel-Threads erstellt oder gelöscht werden können, während die Subroutine getthrds ausgeführt wird, gibt es keine Garantie, dass abgerufene Einträge weiterhin vorhanden sind oder dass alle vorhandenen Kernel-Threads abgerufen wurden.

Bei Verwendung im 32-Bit-Modus werden Grenzwerte, die größer als in 32 Bit dargestellt werden können, auf RLIM_INFINITY abgeschnitten. Große Werte werden auf INT_MAX abgeschnitten. 64-Bit-Anwendungen sind erforderlich, um getthrds64() und struct thrdentry64zu verwenden. Beachten Sie, dass struct thrdentry64 dieselben Informationen wie struct thrdsinfo64 enthält, wobei der einzige Unterschied die Unterstützung für die 64-Bit-tid_t und die 256-Bit-sigset_t ist. Anwendungsentwickler sollten auch getthrds64() in 32-Bit-Anwendungen verwenden, um 64-Bit-Threadinformationen abzurufen, da diese Schnittstelle die neuen, größeren Typen bereitstellt. Die Schnittstelle getthrds () wird weiterhin für 32-Bit-Anwendungen unterstützt, die struct thrdsinfo oder struct thrdsinfo64verwenden, ist aber für 64-Bit-Anwendungen nicht verfügbar.

Parameter

ProcessIdentifier
Gibt die Prozess-ID des Prozesses an, dessen Kernel-Threads abgerufen werden sollen Wenn dieser Parameter auf -1 gesetzt ist, werden alle Kernel-Threads in der Kernel-Thread-Tabelle abgerufen.
ThreadBuffer
Gibt die Anfangsadresse eines Arrays von thrdsinfo oder thrdsinfo64an. oder thrdentry64 Strukturen, die mit Kernel-Thread-Tabelleneinträgen gefüllt werden. Wenn für diesen Parameter der Wert NULL übergeben wird, durchsucht die Subroutine getthrds die Kernel-Thread-Tabelle und legt Rückgabewerte als normal fest, aber es werden keine Kernel-Thread-Tabelleneinträge abgerufen.
ThreadSize
Gibt die Größe einer einzelnen thrdsinfo-, thrdsinfo64-oder thrdentry64 -Struktur an.
IndexPointer
Gibt die Adresse einer Kernel-Thread-ID an, die den erforderlichen Kernel-Thread-Tabelleneintrag angibt (dies muss keinem vorhandenen Kernel-Thread entsprechen). Die Kernel-Thread-ID null wählt den ersten Eintrag in der Tabelle aus. Die Kernel-Thread-ID wird aktualisiert und gibt den nächsten abzurufenden Eintrag an.
count
Gibt die Anzahl der angeforderten Kernel-Thread-Tabelleneinträge an.

Rückgabewert

Bei erfolgreicher Ausführung gibt die Subroutine getthrds die Anzahl der abgerufenen Kernel-Thread-Tabelleneinträge zurück. Ist dieser Wert kleiner als die angeforderte Anzahl, wurde das Ende der Kernel-Thread-Tabelle erreicht. Der Wert 0 wird zurückgegeben, wenn das Ende der Kernel-Thread-Tabelle erreicht wurde. Andernfalls wird ein Wert von -1 zurückgegeben, und die globale Variable errno wird gesetzt, um den Fehler anzuzeigen.

Fehlercodes

Die Subroutine getthrds schlägt fehl, wenn Folgendes zutrifft:

Element Beschreibung
EINVAL ThreadSize ist ungültig oder der Parameter IndexPointer verweist nicht auf eine gültige Kernel-Thread-ID oder der Parameter Anzahl ist nicht größer als null.
ESRCH Der durch den Parameter ProcessIdentifier angegebene Prozess ist nicht vorhanden.
EFAULT Die Kopieroperation in einen der Puffer ist fehlgeschlagen.