Среда программирования Unix ... С 1983/4 ?
Я, честно говоря, не уверен, сколько будет использовать их терминальный материал. Bash немного изменился с тех пор ... Подождите, Bash не существовало до 89 года.
Это хорошая книга (я пытался ее прочитать, пока учился в университете, и с треском провалился), но вы не можете взять примеры, как написано. Хотя многое из C все еще должно работать.
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
, если вам нужна полная командная строка (со всеми параметрами):
cat /proc/$PPID/cmdline
$PPID
определяется оболочкой, это PID родительского процесса /proc/
у вас есть несколько папок с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm
, вы выводите имя команды PID pstree
по имени команды Используя pstree
, вы можете осуществлять поиск по имени дочернего процесса и получать идентификатор процесса (PID) вместе с родителями, бабушкой и дедушкой и любыми дочерними элементами дочернего процесса:
$ pstree -hp | grep sleep
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)
В этом случае sleep
является дочерней командой, а ее PID равен 8414
. Его родительский ID 841 и называется display-auto-brightness
. Дедушка - это оболочка (sh
) с идентификатором процесса 839
. Прадедушка - cron
с идентификатором процесса 795
. Пра-пра-прародитель также имеет cron
с идентификатором процесса 763
.
Если вы хотите выполнить поиск по идентификатору процесса sleep
вместо имени, вы можете использовать:
$ pstree -hp | grep 14653
|-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(14653)
Обратите внимание, что идентификатор процесса sleep
изменен на 14653
. Родитель (PID 841) спит в течение 1 минуты, просыпается на долю секунды и затем запускает новую команду sleep
, которая получает новый идентификатор процесса. Это еще одна причина, по которой поиск sleep
проще, чем поиск по идентификатору процесса.
Этот код был взят из: Автоматически настраивает яркость дисплея на основе восхода и захода солнца и адаптирован к этому вопросу.
Чтобы увидеть всю цепочку вложенных цепочек до процесса загрузки, используйте PID вместо имени:
$ pstree -aps 8541
systemd,1 splash fastboot kaslr
└─cron,763 -f
└─cron,795 -f
└─sh,839 -c /usr/local/bin/display-auto-brightness
└─display-auto-br,841 /usr/local/bin/display-auto-brightness
└─sleep,8541 60
Примечание: Прошла еще одна минута, и команда sleep получает новый PID (8541).
807
или cron
и та же строка, будет возвращен, а также больше детей, если порождено. Но вопрос был о нахождении родителя, не всех детей.
– Community
16.01.2020, 14:35
1
. Я don' t думают, что можно уничтожить PID 1.
– basin
16.01.2020, 14:36
Использовать 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-helper(2072)
ps -o args ...
на результатах, но это имеет что-то вроде запаха.
– Philip Oakley
16.01.2020, 14:35
ppid=
, но перед изодромным с предварением, кажется, необходимо. Я получил различные результаты, если я опустил его.
– Philip Oakley
16.01.2020, 14:36
PPID
определяется как часть стандарта POSIX так любой POSIX, совместимая оболочка должна устанавливать это соответственно. См. pubs.opengroup.org/onlinepubs/9699919799/utilities/… – Community 16.01.2020, 14:34