Как получить родительский PID данного процесса в GNU / Linux из командной строки?
171966
Vi.
Решено, прежде чем спросил: cat /proc/1111/status | grep PPid
быстрее: `grep PPid status | cut -f2`, как в` time (for ((i = 0; i <1000; i ++)); сделать grep PPid status | cut -f2> / dev / null; done) `; Интересно, есть ли что-то еще быстрее?
Aquarius Power 10 лет назад
0
@ AquariusPower Так как вы спрашиваете, fgrep работает быстрее, чем grep. `fgrep PPid status | cut -f2`
jbo5112 8 лет назад
1
sed намного быстрее, чем grep и cut: `sed -rn '/ PPid / s /^.*: \ s + // p' <status`
Marian 7 лет назад
0
#!/bin/sh pid=$1 if [ -z $pid ] then read -p "PID: " pid fi ps -p $ -o ppid=
Если PID не предоставлен функции или сценарию, они по умолчанию показывают PPID текущего процесса.
Чтобы использовать псевдоним, необходимо указать PID.
Знак `=` не обязателен, по крайней мере в OS X 10.8.2.
jtbandes 11 лет назад
0
@jtbandes: знак равенства, используемый здесь, подавляет вывод строки заголовка ([Linux] (http://linux.die.net/man/1/ps) и [OS X] (https://developer.apple) .com / библиотека / Mac / # документация / Darwin / ссылки / страница справочник / man1 / ps.1.html)).
Dennis Williamson 11 лет назад
5
11
Ivan Novotny
Родительский pid находится в переменной оболочки PPID, поэтому
echo $PPID
Да, но 1. Я хочу родительский pid другого процесса, 2. Я хочу, чтобы все предки могли проходить через init.
Vi. 12 лет назад
1
С другой стороны, использование `$ PPID` просто решило проблему, на которую Google предложил эту страницу в качестве ответа.
Paul Whittaker 12 лет назад
1
11
user194394
Это одна из тех вещей, которые я изучаю, забываю, заново изучаю, повторяю. Но это полезно. Флаг 'p' команды pstree показывает дерево с листом в N:
Чтобы получить родительский PID текущего процесса, используйте echo $$.
`pstree` - самый хороший из тех, что я видел здесь.
sudo 7 лет назад
0
5
Vi.
Чтение / proc / $ PID / статус. Может быть легко написано:
#! / Bin / ш P = $ 1 if [-z "$ P"]; затем читать P фи cat / proc / "$ P" / status | grep PPid: | grep -o "[0-9] *"
`grep '^ PPid:' / proc / $ 1 / status | grep -o '[0-9] *' `- это все, что вам нужно. (Для инструментов Unix очень редко делать `if [-z]; затем читать`.)
grawity 14 лет назад
1
@grawity Это помогает делать такие вещи, как `echo $$ | ppid | ppid | ppid`
Vi. 14 лет назад
0
UUOC бесполезное использование кошки
Felipe Alvarez 9 лет назад
2
@FelipeAlvarez, мои руки не используются для ввода `</ some / file grep | grep | ... `.
Vi. 9 лет назад
0
Как насчет `grep / some / file`
Felipe Alvarez 9 лет назад
2
Спасибо за этот ответ, он помог мне во встроенной системе, у которой был только один флаг для ps (-w для широкого вывода), поэтому все ответы, использующие ps, не работали для меня. Спасибо!
Citizen Kepler 8 лет назад
0
Немного более сложный пример, который проверяет команду родителя, запустившего текущий процесс. Измените comm = на cmd =, чтобы увидеть полную команду.
Бесполезное использование _echo_? ;)
bobbogo 7 лет назад
0
Это действительно требуется на некоторых терминалах. Если честно, я точно не помню, но это действительно решило проблему. : D
sebastian_t 7 лет назад
0
1
Praveen S.
Запустите topс любыми опциями, которые вы хотите, как -u username and -p PID.
И пока topработает нажатие f, он показывает список опций, которые вы хотите отобразить в topвыходных данных, и отображаемые параметры будут показаны заглавными буквами, а параметры, которые или не отображаются, будут показаны строчными буквами.
Таким образом, введя букву перед параметром, вы можете включить или отключить его. Для ID родительского процесса вы должны ввести bи затем нажать Enter, он отобразит PPID в верхнем выводе.
Он должен использоваться не в интерактивном режиме. Я уже знаю, что в `htop` вы можете настроить столбец` PPID`.
Vi. 11 лет назад
1
1
Gevork Palyan
Вот быстрое решение, которое также должно работать:
ps $$
Это не дает родительский PID, который запрашивал ОП.
Dennis Williamson 11 лет назад
0