pthread_t
값 (pthread_create()
또는 std::thread::native_hanle()
에서 반환)을 Linux의 pid (tid)에 매핑하는 정상적인 방법이 있습니까? 누군가가 행복해지기 전에 은이 아니며 스레드 자신의 PID를 찾습니다 (gettid()
으로 수행 할 수 있음).pthread_t를 pid (Linux)에 매핑하는 방법
미친 방법은 스레드를 강제로 호출하여 gettid()
을 호출하고 결과를 전달하는 것이지만 너무 많은 문제가됩니다.
내가 생각할 수있는 응용 프로그램 중 하나는 ps -T
이 제공하는 출력으로 프로그램 내에서 생성 된 스레드를 조정하는 것입니다 (pthread_t
사용 가능).
필자가 아는 한, 리눅스에서'pthread_t'는'struct pthread'에 대한 포인터이며,'struct pthread'는'tid' 멤버를 가지고 있습니다. 그러나 나는이 정보를 읽을만한 수용 가능한 방법을 모른다. 사용 가능한 디버그 심볼이 있다면 gdb에서이 구조체를'ptype pthread'로 검사 할 수 있습니다. 디버그 목적으로 만'tid'의 오프셋을'p & ((pthread *) 0) -> tid'로 읽을 수 있고 프로그램 자체에서이 오프셋을 사용하여'pthread_t'에서'tid'를 읽을 수 있습니다. 또는 일부 소형 리더 라이브러리에서 기호 파일 자체의 오프셋을 "휴대용"으로 사용할 수 있습니다. – geza
@geza 정말 재미 있습니다.이 정보를 제공해 주셔서 감사합니다. – SergeyA
스레드의 구현에 따라 다릅니다. linuxthreads는 그들과 관련된 프로세스 id를 가질 수 있으며,'getpid'는 그것을 리턴해야합니다. posix 쓰레드는 그렇지 않을 수 있으므로'getpid'는 주 프로세스의 PID를 반환합니다. 이것을 확인하십시오 : https://stackoverflow.com/a/19677227/1143850 – Serge