2012-05-10 6 views
14

Ich habe eine kurze Frage zu neuen Thread von pthread_create erstellt():pid für neuen Thread

Wenn ich die pid (erhalten von getpid()) der Haupt-Thread und das Kind Thread drucken, sie sind die gleichen, während Wenn ich das Dienstprogramm htop linux verwende, um pid anzuzeigen, sind sie unterschiedlich. Kann mir das jemand erklären? Vielen Dank!!

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

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

+0

Threads sind keine Prozesse! Ein Prozess besteht aus einem oder mehreren Threads. –

Antwort

19

Linux implementiert pthreads() als Light-Weight-Prozesse, dafür erhalten sie eine PID zugewiesen.

Weitere Informationen unter http://www.linuxforu.com/2011/08/light-weight-processes-dissecting-linux-threads/

zu finden gibt es auch ein Beispiel dafür, wie die LWP-Pid für Ihren Thread zu bekommen.

#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

Threads haben beide eine Prozess-ID, zurückgegeben von der getpid() Syscall und ein ID-Gewinde, zurückgegeben von gettid(). Für den Thread, der unter main() ausgeführt wird, sind diese identisch. Ich weiß nicht, aus welcher Hand htop berichtet, sollten Sie die Dokumente überprüfen.