2012-05-10 21 views
14

Tengo una pregunta rápida sobre el nuevo hilo creado por pthread_create():PID para nuevo hilo

Al imprimir el pid (llegar desde getpid()) del hilo principal y el hilo de niños, que son los mismos, mientras cuando uso la utilidad htop linux para mostrar pid, son diferentes. ¿¿Puede alguien explicarme esto?? ¡¡Gracias!!

[email protected]:~/LPI$ ./pthr_create 
-------------------------------------- 
main thread: pid: 4845, ppid: 3335 
child thread: pid: 4845, ppid: 3335 

htop muestra: Screenshot of the htop application showing a list of processes.

+0

¡Los hilos no son procesos! Un proceso se compone de uno o más hilos. –

Respuesta

19

Linux implementa pthreads() como procesos de peso liviano, para lo cual obtienen un PID asignado.

Más información se puede encontrar en http://www.linuxforu.com/2011/08/light-weight-processes-dissecting-linux-threads/

también hay un ejemplo de cómo obtener el LWP-PID para su hilo.

#include <stdio.h> 
#include <syscall.h> 
#include <pthread.h> 

int main() 
{ 
    pthread_t tid = pthread_self(); 
    int sid = syscall(SYS_gettid); 
    printf("LWP id is %d\n", sid); 
    printf("POSIX thread id is %d\n", tid); 
    return 0; 
} 
2

hilos tienen tanto un identificador de proceso, volvió del syscall getpid(), y un ID de hilo, devuelto por gettid(). Para la ejecución de subprocesos en main(), estos serán idénticos. No sé de antemano cuál es el que está informando, debe consultar los documentos.