Получить идентификатор потока для процесса, который соответствует программному pid htop

Я видел, что в режиме дерева htop моя многопоточная программа имеет несколько процессов. Я знаю, что они нить идентификаторы. Но этот идентификатор не совпадает с идентификатором потока, который был возвращен функцией pthread_create.

int _id = pthread_create(&m_iAudioThreadID, NULL, AudioRecvThread, this);

Это m_iAudioThreadID должен быть равен PID, который мы видим в режиме дерева htop для процесса? Это не так, хотя. Как мне найти PID htop программно из моей программы? Благодарю.

0

Решение

Должен ли m_iAudioThreadID быть равным PID, который мы видим в режиме дерева htop для процесса?

Нет, они не. htop показывает вам идентификаторы процессов, PID. PThread-идентификаторы как установлено pthread_create() разные: Различие между процессами и потоками в Linux

Одно из основных отличий состоит в том, что идентификаторы PID уникально идентифицируют процесс в существующих процессах системы, а идентификаторы PThread — уникально идентифицируют поток в существующих потоках процесса.

Как мне найти PID htop программно из моей программы?

По крайней мере, в недавнем Linux: чтобы получить PID, связанный с определенным PThread, используйте gettid() системный вызов из обсуждаемой темы:

#define _GNU_SOURCE

#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>

pid_t gettid(void)
{
return syscall(SYS_gettid);
}

(вдохновленный http://man7.org/linux/man-pages/man2/syscall.2.html)

2

Другие решения


По вопросам рекламы [email protected]