чи можна дізнатися, хто є дітьми конкретного процесу? наприклад, ті діти, яких їх батьківський посвідчення є foo?
чи можна дізнатися, хто є дітьми конкретного процесу? наприклад, ті діти, яких їх батьківський посвідчення є foo?
Відповіді:
Ви шукаєте 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).
Інший варіант полягає у використанні System Monitor (поставляється заздалегідь). У SM Menubar позначте параметр "Залежності" у розділі "Перегляд", щоб мати візуальний зворотній зв'язок, показуючи процеси батьків та дітей, як показано на скріншоті нижче.
Я віддаю перевагу CL (Command Line) і пропоную, щоб ті, хто використовує Linux, в даному випадку Ubuntu щодня, мудро вкладають свій час у вивчення основних команд, через GUI-додатки або принаймні вміють оволодіти обома певний ступінь!
Я не фахівець, але читаючи наведені вище відповіді, мені здалося, що існує, мабуть, більш прямий спосіб зробити це через файлову систему 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.
ps -o ppid= -o pid= -A | awk '$1 == <some pid>' | cut -f2
має відповідати POSIX.