Estoy leyendo este libro , Programación avanzada de Linux por Mark Mitchell, Jeffrey Oldham y Alex Samuel. Es de 2001, un poco viejo. Pero me parece bastante bueno de todos modos.
Sin embargo, llegué a un punto en el que diverge de lo que mi Linux produce en la salida del shell. En la página 92 (116 en el visor), el capítulo 4.5 Implementación de subprocesos GNU / Linux comienza con el párrafo que contiene esta declaración:
La implementación de hilos POSIX en GNU / Linux difiere de la implementación de hilos en muchos otros sistemas similares a UNIX de una manera importante: en GNU / Linux, los hilos se implementan como procesos.
Esto parece un punto clave y luego se ilustra con un código C. La salida en el libro es:
main thread pid is 14608
child thread pid is 14610
Y en mi Ubuntu 16.04 es:
main thread pid is 3615
child thread pid is 3615
ps
La salida es compatible con esto.
Supongo que algo debe haber cambiado entre 2001 y ahora.
El siguiente subcapítulo en la página siguiente, 4.5.1 Manejo de señales, se basa en la declaración anterior:
El comportamiento de la interacción entre señales y subprocesos varía de un sistema tipo UNIX a otro. En GNU / Linux, el comportamiento está dictado por el hecho de que los hilos se implementan como procesos.
Y parece que esto será aún más importante más adelante en el libro. ¿Alguien podría explicar lo que está pasando aquí?
He visto este. ¿Los hilos del kernel de Linux son realmente procesos del kernel? , pero no ayuda mucho. Estoy confundido.
Este es el código 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
devuelve lo que se llamaría una ID de grupo de subprocesos y para obtener una ID única para un proceso que debe usar gettid
. Sin embargo, aparte del núcleo, la mayoría de las personas y las herramientas llamarán a un grupo de subprocesos un proceso, y llamarán a un proceso un subproceso, por coherencia con otros sistemas.