Ich gehe dieses Buch durch , Advanced Linux Programming von Mark Mitchell, Jeffrey Oldham und Alex Samuel. Es ist von 2001, also ein bisschen alt. Aber ich finde es trotzdem ganz gut.
Ich habe jedoch einen Punkt erreicht, an dem es von dem abweicht, was mein Linux in der Shell-Ausgabe erzeugt. Auf Seite 92 (116 im Viewer) beginnt das Kapitel 4.5 GNU / Linux-Thread-Implementierung mit dem Absatz, der diese Anweisung enthält:
Die Implementierung von POSIX-Threads unter GNU / Linux unterscheidet sich in einem wichtigen Punkt von der Thread-Implementierung auf vielen anderen UNIX-ähnlichen Systemen: Unter GNU / Linux werden Threads als Prozesse implementiert.
Dies scheint ein wichtiger Punkt zu sein und wird später mit einem C-Code veranschaulicht. Die Ausgabe im Buch ist:
main thread pid is 14608
child thread pid is 14610
Und in meinem Ubuntu 16.04 ist es:
main thread pid is 3615
child thread pid is 3615
ps
Ausgabe unterstützt dies.
Ich denke, zwischen 2001 und jetzt muss sich etwas geändert haben.
Das nächste Unterkapitel auf der nächsten Seite, 4.5.1 Signalbehandlung, baut auf der vorherigen Anweisung auf:
Das Verhalten der Interaktion zwischen Signalen und Threads variiert von einem UNIX-ähnlichen System zum anderen. In GNU / Linux wird das Verhalten durch die Tatsache bestimmt, dass Threads als Prozesse implementiert werden.
Und es sieht so aus, als würde dies später in diesem Buch noch wichtiger werden. Könnte jemand erklären, was hier los ist?
Ich habe dieses gesehen. Sind Linux-Kernel-Threads wirklich Kernel-Prozesse? , aber es hilft nicht viel. Ich bin verwirrt.
Dies ist der C-Code:
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* thread_function (void* arg)
{
fprintf (stderr, "child thread pid is %d\n", (int) getpid ());
/* Spin forever. */
while (1);
return NULL;
}
int main ()
{
pthread_t thread;
fprintf (stderr, "main thread pid is %d\n", (int) getpid ());
pthread_create (&thread, NULL, &thread_function, NULL);
/* Spin forever. */
while (1);
return 0;
}
getpid
eine sogenannte Threadgruppen-ID zurück und erhalten eine eindeutige ID für einen Prozess, den Sie verwenden müssen gettid
. Mit Ausnahme des Kernels bezeichnen die meisten Benutzer und Tools eine Thread-Gruppe als Prozess und einen Prozess als Thread, um die Konsistenz mit anderen Systemen zu gewährleisten.