Получение идентификатора текущего процесса без unistd.h - PullRequest
4 голосов
/ 10 февраля 2009

Я работаю над алгоритмом обнаружения тупиков, и мне выдаются только библиотеки уровня ядра, то есть #include <linux/somelibrary> и больше ничего. Существуют ли средства уровня ядра, которые позволят мне получить pid текущего процесса, подобный getpid() из unistd.h?

Ответы [ 2 ]

7 голосов
/ 10 февраля 2009

Я провел небольшое исследование и нашел ответ. Большое спасибо за ваше руководство. Быстрый код, который я использовал, был:

printf("My current process id/pid is %d\n", current->pid);

Еще раз спасибо!

4 голосов
/ 10 февраля 2009

Этот вопрос не имеет большого смысла.

Вы пишете код на основе ядра? В этом случае вы можете получить pid текущей задачи с помощью макроса «current», который указывает на структуру задачи текущей задачи (которая содержит член с pid). Это будет работать только в том случае, если код вашего ядра выполняется в контексте, где «текущая задача» имеет смысл (то есть не прерывание, тасклет и т. Д.).

Если вы пишете код пользовательского пространства, не должно быть причин, по которым вы не можете вызвать getpid, который является библиотечным вызовом из библиотеки C, определенной в unistd.h (или чем-то, что он включает), который выполняет системный вызов. Если есть такая причина, пожалуйста, объясните.

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

...