스레드를 생성하는 실행 중인 프로세스의 스레드를 보는 방법은 무엇입니까?

스레드를 생성하는 실행 중인 프로세스의 스레드를 보는 방법은 무엇입니까?

나는 두 개의 스레드를 생성하는 아주 작은 프로그램을 작성했습니다.

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

void *start()
{
        printf("Am a new thread!\n");
        printf("%d\n",pthread_self());
}

void main()
{

        pthread_t thread_id1;
        pthread_t thread_id2;

        pthread_create(&thread_id1,NULL,start,NULL);
        pthread_create(&thread_id2,NULL,start,NULL);
        //pthread_join(thread_id,NULL);
        sleep(30);

}

프로그램을 컴파일하고 실행할 때:

gcc create.c -lpthread
./a.out

새 터미널을 열고 스레드를 보려고 했더니 다음과 같은 결과가 나왔습니다.

ps -efL | grep a.out
root      1943 20158  1943  0    1 15:25 pts/4    00:00:00 ./a.out
root      1985  1889  1985  0    1 15:25 pts/5    00:00:00 grep --color=auto a.out

그렇다면 여기에 두 개의 스레드 ID가 표시되지 않는 이유는 무엇입니까?

답변1

두 개의 추가 스레드가 메시지를 작성하고 종료하므로 이를 볼 시간이 없습니다 ps.

~에서man pthread_create:

새 스레드는 다음 방법 중 하나로 종료됩니다.

* pthread_join(3)을 호출한 동일한 프로세스의 다른 스레드에서 사용할 수 있는 종료 상태 값을 지정하여 pthread_exit(3)을 호출합니다.

* start_routine()에서 반환됩니다.. 이는 return 문에 제공된 값으로 pthread_exit(3)을 호출하는 것과 동일합니다.

[...]

다음을 통해 무슨 일이 일어나고 있는지 추적할 수 있습니다 strace.

$ strace -f -e trace=clone,exit ./a.out 
clone(strace: Process 409 attached
child_stack=0x7f7126930ff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f71269319d0, tls=0x7f7126931700, child_tidptr=0x7f71269319d0) = 409
[pid   408] clone(strace: Process 410 attached
child_stack=0x7f712612fff0, flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, parent_tidptr=0x7f71261309d0, tls=0x7f7126130700, child_tidptr=0x7f71261309d0) = 410
Am a new thread!
Am a new thread!
647173888
638781184
[pid   409] exit(0 <unfinished ...>
[pid   410] exit(0 <unfinished ...>
[pid   409] <... exit resumed>)         = ?
[pid   410] <... exit resumed>)         = ?
[pid   410] +++ exited with 0 +++
[pid   409] +++ exited with 0 +++

관련 정보