Я видел, что в режиме дерева htop моя многопоточная программа имеет несколько процессов. Я знаю, что они нить идентификаторы. Но этот идентификатор не совпадает с идентификатором потока, который был возвращен функцией pthread_create.
int _id = pthread_create(&m_iAudioThreadID, NULL, AudioRecvThread, this);
Это m_iAudioThreadID
должен быть равен PID, который мы видим в режиме дерева htop для процесса? Это не так, хотя. Как мне найти PID htop программно из моей программы? Благодарю.
Должен ли 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)