Grundlegendes zu Pthreads

Ich bin auf ein Konzept in gestoßenFortgeschrittene Linux-Programmierung. Hier isteine Verbindung: beziehen auf4.5 GNU / Linux-Thread-Implementierung.

Ich weiß genau, was der Autor sagt, aber ich bin verwirrt mit dem Programm, das er zum Drucken von processIDs für Threads erklärt hat.

Hier ist der 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;
} 

Die Ausgabe für den obigen Code laut Autor ist

% cc thread-pid.c -o thread-pid -lpthread
% ./thread-pid &
[1] 14608
main thread pid is 14608
child thread pid is 14610 

Die Ausgabe, die ich bekomme, wenn ich kompiliere, ist

[1] 3106
main thread pid is 3106
child thread pid is 3106

Ich verstehe, dass zum Erstellen eines Threads Linux intern aufruftKlon(die meisten Fälle), wieGabel Systemaufruf erstellt einen Prozess. Der einzige Unterschied besteht darin, dass in einem Prozess erstellte Threads denselben Prozessadressraum gemeinsam nutzen, während ein von einem übergeordneten Prozess erstellter Prozess den übergeordneten Prozessadressraum kopiert. Ich denke also, dass das Drucken der Prozess-ID in Threads dieselbe Prozess-ID ergibt. Aber es ist nicht das gleiche Ergebnis in Buch.

Bitte sag mir wovon redet er ..? Ist die Antwort in dem Buch / meinem falsch?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage