Найти детей в процессе

15

Есть ли способ узнать, кто дети определенного процесса? например тех детей, у которых их родительский идентификатор foo?

Мохаммед Реза Резвани
источник

Ответы:

26

Вы ищете pstreeкоманду. pstreeсам по себе перечислит все процессы в виде дерева (как lsblkделает). Вы можете использовать этот -pфлаг, чтобы получить список идентификаторов PID, а также -sпоказать родительский процесс:

$ pstree -p 602
udisksd(602)-+-{cleanup}(607)
             |-{gdbus}(605)
             |-{gmain}(603)
             `-{probing-thread}(606)

(Вероятно) POSIX-совместимый способ получения дочерних PID (о которых я упоминал в комментариях в другом месте):

ps -o ppid= -o pid= -A | awk '$1 == <some pid>{print $2}'

Это указывает psна запись родительского PID и PID всех процессов (без заголовков), а затем использует, awkчтобы увидеть, какие строки имеют данный PID в первом поле (родительский PID), и печатает соответствующее второе поле (дочерний PID).

Мур
источник
10

Если вы просто хотите увидеть непосредственных потомков процесса, чей идентификатор PID, 123вы можете использовать параметр psкоманды --ppid:

ps --ppid 123

Вы можете объединить это с pidofкомандой, чтобы получить дочерние элементы процесса по имени, то есть заданному процессу с именемfoo

ps --ppid $(pidof foo)
steeldriver
источник
10

Другой вариант - использовать системный монитор (поставляется предварительно установленным). В SM Menubar пометьте опцию «Зависимости» в разделе «Вид», чтобы иметь визуальную обратную связь, показывающую родительский и дочерний процессы, как показано на скриншоте ниже.

Я сам предпочитаю CL (командную строку) и предполагаю, что те, кто использует Linux, в данном случае Ubuntu на ежедневной основе, разумно тратят свое время на изучение основных команд, через приложения с графическим интерфейсом или, по крайней мере, могут освоить и то, и другое. определенная степень!

введите описание изображения здесь введите описание изображения здесь

V2R
источник
1
OT: Какая это тема?
Муру
1
Я использую Ubuntu + GnomeShell 3.2.1 Тема называется «AdwaitaDark», которая является темой GTK3, но она настроена и недоступна, как вы видите на скриншотах.
v2r
6

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

/proc/$mypid/task/$mypid/children

например

$ cat /proc/3123/task/3123/children 
3131 3133

Точно так же вы можете получить идентификатор родительского процесса через запись "PPid" в файле

/proc/$mypid/task/$mypid/status

например

$ grep PPid /proc/3131/task/3131/status
PPid:   3123
$ grep PPid /proc/3131/task/3131/status | cut -f2
3123

Я не уверен, насколько это переносимо за пределами систем Linux.

andybuckley
источник
1
Если переносимость является проблемой: ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2должна быть POSIX-совместимой.
Муру