15

pthread_create() によって作成された新しいスレッドについて簡単な質問があります。

メイン スレッドと子スレッドの pid (getpid() から取得) を出力すると、それらは同じですが、htop Linux ユーティリティを使用して pid を表示すると、それらは異なります。誰でもこれを説明できますか?? ありがとう!!

kai@kai-T420s:~/LPI$ ./pthr_create
--------------------------------------
main thread: pid: 4845, ppid: 3335
child thread: pid: 4845, ppid: 3335

htop ショー: プロセスのリストを表示する htop アプリケーションのスクリーンショット。

4

2 に答える 2

20

Linux はpthreads()軽量プロセスとして実装されるため、PID が割り当てられます。

詳細については、http://www.linuxforu.com/2011/08/light-weight-processes-dissecting-linux-threads/を参照してください。

スレッドの LWP-Pid を取得する方法の例もあります。

#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;
}
于 2012-05-11T09:05:31.390 に答える
2

スレッドには、getpid() システムコールから返されるプロセス ID と、gettid() から返されるスレッド ID の両方があります。main() の下で実行されるスレッドの場合、これらは同じになります。どの htop が報告しているかはわかりません。ドキュメントを確認してください。

于 2012-05-11T00:03:53.363 に答える