Дерево процессов, как найти, является ли указанный процесс корневым? - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть приложение для мониторинга каталогов, которое работает рекурсивно, запуская новые процессы.

Я хотел бы знать, являюсь ли я "корневым" процессом в этом дереве. Я думал о попытке получить имя вызывающего процесса и проверить, совпадает ли оно с argv[0].

Есть ли более разумный способ сделать это? Имейте в виду, это приложение для Linux.

Имейте в виду, у меня не так много времени для этого, и я всего лишь студент, поэтому было бы неплохо простое решение.

Спасибо за ваше время.

Ответы [ 3 ]

5 голосов
/ 13 апреля 2011

Если вы используете fork() для создания новых процессов, вы можете иметь локальную переменную, изначально установленную в ноль, которую каждый дочерний элемент устанавливает в 1 сразу после разветвления.Только корневой процесс все равно будет иметь нулевое значение после разветвления.

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

РЕДАКТИРОВАТЬ:

Если вы не можете использовать это (например, потому что вы делаете exec() после форка), вы можете использовать любой из распространенных способов, которые оболочки используют для передачи информации в программычто вы запускаете:

  • Переменные среды: вызов setenv() после fork(), но до exec() - или добавьте его в среду при вызове exec().

  • Использовать специальный аргумент командной строки.

  • Использовать специальное значение для argv[0] при выполнении exec().

2 голосов
/ 13 апреля 2011

Есть ли у вас возможность добавить аргумент, означающий "Я не корень"?Это кажется самым простым подходом.

1 голос
/ 14 апреля 2011

Если вы вызываете exec, добавьте специальный аргумент или переменную среды с именем "I_AM_NOT_THE_ROOT", которую дочерний процесс получает, но родительский не получает.но переменные env могут быть более удобными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...