Знайдіть дітей процесу


Відповіді:


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)

10

Інший варіант полягає у використанні System Monitor (поставляється заздалегідь). У SM Menubar позначте параметр "Залежності" у розділі "Перегляд", щоб мати візуальний зворотній зв'язок, показуючи процеси батьків та дітей, як показано на скріншоті нижче.

Я віддаю перевагу CL (Command Line) і пропоную, щоб ті, хто використовує Linux, в даному випадку Ubuntu щодня, мудро вкладають свій час у вивчення основних команд, через GUI-додатки або принаймні вміють оволодіти обома певний ступінь!

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


1
ОТ: Що це за тема?
муру

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.


1
Якщо портативність викликає занепокоєння: ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2має відповідати POSIX.
muru
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.