2012-05-10 17 views
14

Ho una domanda veloce su nuovo thread creato da pthread_create():PID per nuovo thread

Quando stampo il pid (ottenere da getpid()) del thread principale e il thread figlio, sono la stessa cosa, mentre quando uso l'utility htop linux per mostrare pid, sono diversi. Qualcuno può spiegarmi questo?? Grazie!!

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

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

+0

I thread non sono processi! Un processo è composto da uno o più thread. –

risposta

19

Linux implementa pthreads() come processi a peso leggero, quindi viene assegnato un PID.

Ulteriori informazioni sono disponibili all'indirizzo http://www.linuxforu.com/2011/08/light-weight-processes-dissecting-linux-threads/

v'è anche un esempio di come ottenere il LWP-PID per il tuo thread.

#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

Filati hanno sia un ID di processo, restituito dal syscall getpid(), e un ID di thread, restituito da gettid(). Per il thread in esecuzione in main(), questi saranno identici. Non so fuori mano quale htop sta segnalando, dovresti controllare i documenti.

Problemi correlati