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

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

14
задан 19 August 2014 в 17:24

5 ответов

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

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

А (вероятно), совместимый POSIX способ получить дочерний PIDs (что я упомянул в комментариях в другом месте):

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

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

25
ответ дан 16 November 2019 в 13:36

Другая опция, для использования Системный монитор (прибывает предварительно установленный). В СМ Строка меню отмечают опцию "Dependencies", при "Представлении", иметь визуальную обратную связь, показывая родителя и дочерний процесс (процессы) как шоу в снимке экрана ниже.

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

enter image description here enter image description here

10
ответ дан 16 November 2019 в 13:36

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

ps --ppid 123

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

ps --ppid $(pidof foo)
10
ответ дан 16 November 2019 в 13:36

Я не эксперт, но чтение вышеупомянутых ответов, мне казалось, что существует, вероятно, более прямой способ сделать это через 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, все же.

6
ответ дан 16 November 2019 в 13:36

если вы хотите увидеть только дочерние элементы первого уровня данного родительского процесса id посмотрите в /proc//task/ Запись /children.

Обратите внимание, что этот файл содержит pid дочерних процессов первого уровня. для всего дерева процессов сделайте это рекурсивно.

это https://lwn.net/Articles/475688/ содержит дополнительную информацию об этом.

1
ответ дан 16 August 2020 в 03:48

Другие вопросы по тегам:

Похожие вопросы: