GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann die Thread-ID eines Multithread-Prozesses mit der Prozess-ID eines anderen laufenden Prozesses identisch sein?

Laut der Manpage von pthreads ist die Thread-ID innerhalb des Erstellungsprozesses eindeutig, also könnte ein anderer Thread oder Prozess dieselbe ID haben. Wenn es jedoch innerhalb eines Prozesses eindeutig ist und eine Prozess-ID im System eindeutig ist, können Sie möglicherweise eine Kombination aus beiden als eindeutige Kennung verwenden.

Jeder der Threads in einem Prozess hat eine eindeutige Thread-Kennung (gespeichert im Typ pthread_t). Dieser Bezeichner wird an den Aufrufer von pthread_create(3) zurückgegeben, und ein Thread kann seinen eigenen Threadbezeichner mit pthread_self(3) erhalten. Thread-IDs sind nur innerhalb eines Prozesses garantiert eindeutig.


Die TID (wie von sys_gettid() zurückgegeben Systemaufruf) ist für alle Threads auf dem System eindeutig, und für einen Singlethread-Prozess sind PID und TID gleich. Das bedeutet, dass eine TID niemals mit einer PID eines anderen Prozesses kollidieren wird.


Während die pthread-ID möglicherweise nicht eindeutig ist, ist die Task-ID (wie in /proc/PID/task zu sehen) in einer Implementierung, in der Threads Tasks zugeordnet werden, tatsächlich systemweit eindeutig und hat eine ähnliche Form wie eine tatsächliche PID.


Linux
  1. Wie ändere ich die Ausgabeumleitung eines laufenden Prozesses?

  2. Linux – Festlegen der laufenden Prozessaffinität mit Taskset schlägt fehl?

  3. Wohin gehen die Ansi-Escape-Codes, wenn ich zu einem anderen Prozess leite? Kann ich sie behalten?

  4. Kann ich GDB verwenden, um einen laufenden Prozess zu debuggen?

  5. Wie lautet die PID im Host eines Prozesses, der in einem Docker-Container ausgeführt wird?

Wie können Sie die Prozessornummer finden, auf der ein Thread läuft?

Wie kann ich sehen, in welchem ​​CPU-Kern ein Thread läuft?

Wie kann ich den absoluten Pfad eines laufenden Prozesses erfahren?

Bestimmen des bestimmten Prozessors, auf dem ein Prozess läuft

Wie kann ich die Uhrzeit eines laufenden Prozesses abrufen?

Kann der Init-Prozess ein Shell-Skript in Linux sein?