Przeglądam tę książkę , Advanced Linux Programming, Mark Mitchell, Jeffrey Oldham i Alex Samuel. Jest z 2001 roku, więc trochę stary. Ale i tak uważam to za całkiem dobre.
Doszedłem jednak do momentu, gdy odbiega on od tego, co mój Linux produkuje w wynikach powłoki. Na stronie 92 (116 w przeglądarce) rozdział 4.5 Implementacja wątku GNU / Linux zaczyna się od akapitu zawierającego to oświadczenie:
Implementacja wątków POSIX w GNU / Linux różni się od implementacji wątków w wielu innych systemach podobnych do UNIX w istotny sposób: w GNU / Linux wątki są implementowane jako procesy.
To wydaje się kluczowe, a później zilustrowane kodem C. Dane wyjściowe w książce to:
main thread pid is 14608
child thread pid is 14610
A w moim Ubuntu 16.04 jest to:
main thread pid is 3615
child thread pid is 3615
ps
wyjście obsługuje to.
Wydaje mi się, że coś musiało się zmienić od 2001 roku do teraz.
Następny podrozdział na następnej stronie, 4.5.1 Obsługa sygnałów, stanowi rozwinięcie poprzedniej instrukcji:
Zachowanie interakcji między sygnałami i wątkami różni się w zależności od systemu uniksowego. W GNU / Linux zachowanie jest podyktowane faktem, że wątki są implementowane jako procesy.
Wygląda na to, że będzie to jeszcze ważniejsze w dalszej części książki. Czy ktoś mógłby wyjaśnić, co się tutaj dzieje?
Widziałem to. Czy wątki jądra Linuksa naprawdę są procesami jądra? , ale to niewiele pomaga. Jestem zmieszany.
To jest kod C:
#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
zwraca to, co byłoby nazywane identyfikatorem grupy wątków i aby uzyskać unikalny identyfikator dla procesu, którego musisz użyć gettid
. Jednak inne niż jądro, większość ludzi i narzędzi nazywa grupę wątków procesem, a proces nazywa wątkiem, aby zachować spójność z innymi systemami.