Преформатный способ получения PID из TID - PullRequest
0 голосов
/ 10 сентября 2018

Этот вопрос не об идентификаторах pthread, а о значениях, обычно получаемых с помощью gettid или ptrace.

Предоставляет ли ядро ​​Linux какой-либо механизм для получения идентификатора группы потоков (обычно получаемого getpid) из данного тида относительно эффективным способом? Что-то, что не требует ввода-вывода или анализа?

Кажется, что единственный метод open /proc/TID/status, read файл в буфер, построчно сканировать на Tgid, а затем анализировать строку как целое число без знака.

Я надеюсь, что есть системный вызов, который я пропустил и который возвращает tgid / pid с учетом pid, даже если идентификатор возвращается косвенно в некоторой структуре данных.

Ответы [ 2 ]

0 голосов
/ 25 марта 2019

просто добавив к уже имеющимся ответам. На самом деле лучшей альтернативы в Linux нет. Я сам искал что-то лучшее и нашел этот проект, который пытался предложить что-то более полезное программно:

https://criu.org/Task-diag

Ничего из этого, однако, не выше по течению, возможно, потому что слишком мало людей, похоже, действительно заботятся о проблеме в данный момент. В основном это касается высокопроизводительных приложений трассировки на уровне ОС и реального времени, которые только начинают развиваться в Linux.

Интересный факт, что другие подобные ОС не имеют этой проблемы (OpenBSD, QNX, ...)

0 голосов
/ 10 сентября 2018

Кажется, такого системного вызова нет. Информация может быть получена только из /proc, и ваше текущее решение выглядит как наиболее эффективный способ сделать это.

...