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.
- 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.
- 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. |