Как получить родительский pid из данного pid детей?
Я знаю, что могу вручную проверить это в / proc, мне интересно, есть ли умный / лучший способ добиться этого в Ubuntu. Обратите внимание, что родитель может или не может быть убит.
Спасибо
Как получить родительский pid из данного pid детей?
Я знаю, что могу вручную проверить это в / proc, мне интересно, есть ли умный / лучший способ добиться этого в Ubuntu. Обратите внимание, что родитель может или не может быть убит.
Спасибо
использование ps -o ppid=
ps -o ppid= 2072
возвращает 2061
, который вы можете легко использовать в скрипте и т. д. ps -o ppid= -C foo
дает PPID процесса с командой foo
. Вы можете также использовать старинке ps | grep
: ps -eo ppid,comm | grep '[f]oo'
.ps -f 2072
возвращается
UID PID PPID C STIME TTY STAT TIME CMD izx 2072 2061 0 07:16? S 0:00 / usr / lib / pulseaudio / pulse / gconf-helper
pstree
Соотношение: pstree -s -p 2072
:
INIT (1) ───pulseaudio (2061) ───gconf-хелперов (2072)
ps -o args ...
результатов, но это немного пахнет.ppid=
но перед пидом кажется необходимым. Я получил разные результаты, если бы я его пропустил.Использование только переменной оболочки для получения родительского PID:
если вам нужна команда из этого родительского pid:
если вам нужна полная командная строка (со всеми параметрами):
объяснение
$PPID
определяется оболочкой, это PID родительского процесса/proc/
, у вас есть несколько каталогов с PID каждого процесса. Затем, если выcat /proc/$PPID/comm
, вы повторяете имя команды PIDПроверьте man proc
источник
PPID
определяется как часть стандарта POSIX, поэтому любая совместимая с POSIX оболочка должна устанавливать его соответствующим образом. См. Pubs.opengroup.org/onlinepubs/9699919799/utilities/…Использование
pstree
по имени командыИспользуя его,
pstree
вы можете осуществлять поиск по имени дочернего процесса и получать идентификатор процесса (PID) вместе с родителями, бабушкой и дедушкой и всеми детьми дочернего процесса:В данном случае
sleep
это дочерняя команда, а это PID8414
. Его родительский ID 841 и называетсяdisplay-auto-brightness
. Дедушка - это shell (sh
) с идентификатором процесса839
. Прадедушкаcron
с идентификатором процесса795
. У пра-пра-прародителя такжеcron
есть идентификатор процесса763
.Если вы хотите искать по идентификатору процесса
sleep
вместо имени, вы можете использовать:Обратите внимание, что
sleep
идентификатор процесса изменен на14653
. Родитель (PID 841) спит в течение 1 минуты, просыпается на долю секунды и затем запускает новуюsleep
команду, которая получает новый идентификатор процесса. Это еще одна причина, почему поискsleep
проще, чем поиск по идентификатору процесса.Этот код был взят из: Автоматическая настройка яркости дисплея на основе восхода и захода солнца и адаптирована к этому вопросу.
Чтобы увидеть всю цепочку вложенных цепочек до процесса загрузки, используйте PID вместо name:
Примечание. Прошла еще одна минута, и команда sleep получает новый PID (8541).
источник
807
илиcron
одна и та же строка будет перезапущена, а также больше детей, если появятся. Но вопрос был в том, чтобы найти родителя, а не всех детей.1
. Я не думаю, что вы можете убить PID 1.ps -efj
также может быть использован для того же.Например,
источник