GNU/Linux >> Tutoriales Linux >  >> Linux

¿Los hilos del kernel de Linux son realmente procesos del kernel?

La documentación puede ser bastante confusa, así que aquí está el "real " Modelo Linux:

  • dentro del kernel de Linux, algo que se puede ejecutar (y programar) se denomina "proceso",
  • cada proceso tiene un Id. de proceso (PID) exclusivo del sistema y un Id. de grupo de subprocesos (TGID),
  • un proceso "normal" tiene PID=TGID y ningún otro proceso comparte este valor TGID,
  • un proceso "enhebrado" es un proceso cuyo valor TGID es compartido por otros procesos,
  • varios procesos que comparten el mismo TGID también comparten, al menos, el mismo espacio de memoria y controladores de señal (a veces más),
  • si un proceso "subproceso" tiene PID=TGID, puede llamarse "el subproceso principal",
  • llamando a getpid() de cualquier proceso devolverá su TGID (=PID "hilo principal"),
  • llamando gettid() de cualquier proceso devolverá su PID (!),
  • cualquier tipo de proceso se puede crear con el clone(2) llamada al sistema,
  • lo que se comparte entre los procesos se decide pasando banderas específicas a clone(2) ,
  • nombres numéricos de carpetas que puede enumerar con ls /proc como /proc/NUMBER son TGID,
  • nombres numéricos de las carpetas en /proc/TGID/task como /proc/TGID/task/NUMBER son PID,
  • aunque no vea todos los PID existentes con ls /proc , todavía puedes hacer cd /proc/any_PID .

Conclusión :desde el punto de vista del kernel, solo existen procesos, cada uno con su propio PID único, y un llamado subproceso es simplemente un tipo diferente de proceso (que comparte, al menos, el mismo espacio de memoria y controladores de señal con uno o varios otros). -s).

Nota: la implementación del concepto "hilo" en Linux ha llevado a una confusión de vocabulario, y si getpid() te está mintiendo no hace lo que pensabas, es porque su comportamiento sigue la compatibilidad con POSIX (se supone que los subprocesos comparten un PID común).


No hay absolutamente ninguna diferencia entre un hilo y un proceso en Linux. Si observa clon(2), verá un conjunto de indicadores que determinan qué se comparte y qué no se comparte entre los subprocesos.

Los procesos clásicos son solo hilos que no comparten nada; puede compartir los componentes que desee en Linux.

Este no es el caso en otras implementaciones de SO, donde hay diferencias mucho más sustanciales.


Los hilos son procesos bajo Linux. Se crean con el clone llamada al sistema, que devuelve un ID de proceso al que se puede enviar una señal a través del kill llamada al sistema, como un proceso. Los procesos de subprocesos son visibles en ps producción. El clone la llamada se pasa indicadores que determinan qué parte del entorno del proceso principal se comparte con el proceso del subproceso.


Linux
  1. UNIX/Linux:3 Maneras de Enviar Señal a Procesos

  2. Introducción a los subprocesos de Linux - Parte I

  3. Procesos UNIX/Linux:Función C fork()

  4. ¿Qué son los procesos, subprocesos, procesos ligeros y estado del proceso de Linux?

  5. Gestión de procesos en Ubuntu Linux

Cómo enumerar los procesos en ejecución en Linux

Comando Ps en Linux (Lista de Procesos)

Cómo matar procesos Zombie en Linux

Supervisión de procesos en Linux

Comandos para la Gestión de Procesos en Linux

Cómo enviar procesos a segundo plano en Linux