Объяснение о нескольких su

Я немного смущен, когда происходит несколько su. Допустим, произошла такая ситуация:

Fikrie su to root :

ps -ef | grep su:

root       15524  15388  0  10:15  pts/0  00:00:00 su root

Я знаю, что pid для этого su — 15524, а pid родителя — 15388. Но когда происходит несколько su. например: эта ситуация.

Fikrie su root:
root su fikrie2:
fikrie 2 su root:

ps -ef | grep su:

root       15450  15388  0  10:15  pts/0  00:00:00 su root
fikrie2    15468  15458  0  10:15  pts/0  00:00:00 su fikrie2
root       15478  15476  0  10:15  pts/0  00:00:00 su root

Я думал, что когда root su входит в fikrie2, первый pid будет ppid для второго su. Как-то, когда я попытался найти процесс, это меня смущает. PPID стал 15458 вместо 15450 или 15388. Ни один из ppid не связан/не связан с ppid или pid перед ним. Я попытался найти в Google и прочитать о process relationship в Advanced Programming in the UNIX Environment книге. Может ли кто-нибудь дать мне хорошее объяснение по этому поводу или, может быть, ссылку, которая поможет мне лучше понять отношения процесса.

Я пытаюсь написать код, чтобы найти пользователя, который входит в этого пользователя. Из всех ответов я смотрю на SO, они только помогают найти исходного пользователя, например. Фикри. Если произойдет вторая ситуация, я не смогу получить fikrie2, когда я использую su для получения root-прав от fikrie2. Вместо этого я получаю fikrie, который является первоначальным пользователем. Моя первоначальная идея заключалась в том, чтобы использовать родительский идентификатор для получения пользователя, но при этом из командной строки. Это действительно смущает меня.

PS * Я пробую это на платформе Unix. Я ничего не знаю о Windows, но если ppid и pid различаются между Windows и Unix, пожалуйста, укажите мне направление в Unix.


person Mohd Fikrie    schedule 09.06.2014    source источник


Ответы (1)


Я не уверен, но я подозреваю, что родительский процесс, который вы видите, является оболочкой, которая была вызвана. Когда вы su, вы запустите .profile, который вызовет несколько других процессов и завершится запуском оболочки. Таким образом, родительский процесс не будет предыдущим вызовом su, потому что это не тот процесс, который породил этот. Это сделала оболочка.

person dave    schedule 09.06.2014