Для доступа к PCB процесса в C - PullRequest
1 голос
/ 17 февраля 2011

Я работаю в Linux, и у меня возникло небольшое замешательство: могу ли я получить доступ к PCB процесса или нет? если да, то к какому контенту мы можем получить доступ и распечатать их на терминале, а если нет, то почему бы и нет?

спасибо за ответ .....

Ответы [ 2 ]

9 голосов
/ 17 февраля 2011

Если под печатной платой вы подразумеваете Блок управления процессом, да и нет ...

Нет , поскольку он находится в адресном пространстве ядра и не может быть напрямую доступен для пользовательских процессов.Ядро предоставляет некоторую информацию с печатной платы в разделе /proc - подробности см. В справочной странице для proc(5).Эта информация обычно доступна в виде простого текста и может быть легко отображена - попробуйте, например:

cat /proc/self/status

Да , поскольку при использовании средств отладки ядра struct task_struct (и другие связанные структуры) для процесса могут быть доступны.Это не простая задача;вам нужно хорошее понимание исходного кода ядра.Основная идея будет заключаться в том, чтобы попытаться найти структуру в /proc/kcore или /proc/kmem.Вам потребуются права администратора (root) и очень хорошее понимание структуры памяти ядра.Это должно быть сделано только для отладки или исследования ядра - пожалуйста, не делайте этого в производственном коде, особенно когда структура внутренних версий ядра изменяется без предупреждения между версиями ядра!

0 голосов
/ 17 февраля 2011

Большая часть этой информации может быть доступна через файловую систему proc, обычно монтируемую в / proc.Например, если я хочу увидеть информацию для процесса 1 в моей системе:

$ cd /proc/1
$ ls
...a bunch of files...

Вы можете узнать, что большинство из них означает через "man proc" или "man 5 proc".Большое количество информации об этих файлах также содержится в дереве исходных текстов Linux по адресу "$ {LINUX_SRC} /Documentation/filesystems/proc.txt".Эти файлы можно открывать и читать, как и любой другой файл.Например:

$ cat status
Name:   init
State:  S (sleeping)
Tgid:   1
Pid:    1
PPid:   0
...
$

Удачи.

...