Как получить идентификатор родительского процесса для данного дочернего процесса?

Как уже упоминалось, синтаксический анализ сложных структурированных данных является предпочтительным с соответствующим API. Python имеет модуль json для этого, который я лично использую довольно много в своих сценариях, и довольно легко извлечь нужные вам поля так:

$ python -c 'import sys,json;print json.load(sys.stdin)["buildStatus"]["status"]' <  input.txt
ERROR

Что происходит здесь, так это то, что мы перенаправить входной файл на stdin python и прочитать это с помощью json.load(). Это становится словарем python с ключом «buildStatus», и он содержит другой словарь python с ключом «статус». Таким образом, мы просто печатаем значение ключа в словаре, который хранится в другом словаре. Довольно просто.

Помимо простоты, еще одно преимущество заключается в том, что python и этот API все предустановлены и поставляются с Ubuntu по умолчанию.

36
задан 21 June 2012 в 11:28

24 ответа

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 25 July 2018 в 18:23

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
41
ответ дан 25 July 2018 в 18:23

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 25 July 2018 в 18:23

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
41
ответ дан 31 July 2018 в 10:30

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 31 July 2018 в 10:30

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 31 July 2018 в 10:30

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 2 August 2018 в 00:35

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 2 August 2018 в 00:35

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
41
ответ дан 2 August 2018 в 00:35

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
41
ответ дан 4 August 2018 в 16:05

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 4 August 2018 в 16:05

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 4 August 2018 в 16:05

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 6 August 2018 в 00:43

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
42
ответ дан 6 August 2018 в 00:43

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 6 August 2018 в 00:43

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
42
ответ дан 7 August 2018 в 18:08

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 7 August 2018 в 18:08

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 7 August 2018 в 18:08

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 10 August 2018 в 06:55

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 10 August 2018 в 06:55

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
42
ответ дан 10 August 2018 в 06:55

Использование только переменной для получения родительского PID:

echo $PPID

, если вам нужна команда из этого родительского pid:

cat /proc/$PPID/comm

if вам нужна полная командная строка (со всеми опциями):

cat /proc/$PPID/cmdline

Объяснение

  • $PPID определяется оболочкой, это PID родительского процесса
  • в /proc/, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm, вы эхо отзываете имя команды PID

Проверьте man proc

2
ответ дан 15 August 2018 в 18:52

Как получить родительский PID (PPID) из идентификатора процесса ребенка (PID) с помощью командной строки

Используйте 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)
    
42
ответ дан 15 August 2018 в 18:52
  • 1
    Вы знаете способ сделать pstree show invocations (команда + аргументы) без разделения строк? Моя установка автоматически разбивает строки, если я добавляю аргументы, даже если результат может легко вписаться в одну строку. Человеческая страница, похоже, говорит так же, но не дает повода. Мое обходное решение включает извлечение PID из pstree и использование результатов ps -o args ... по результатам, но у этого есть немного запаха. – John P 1 March 2017 в 08:13

Использование pstree по имени команды

Используя pstree, вы можете выполнить поиск по имени дочернего процесса и получить идентификатор процесса (PID) вместе с родителями, дедушкой и бабушкой и любыми дочерними элементами дочернего процесса :

$ pstree -hp | grep sleep
           |-cron(763)---cron(795)---sh(839)---display-auto-br(841)---sleep(8414)

В этом случае sleep является дочерней командой, а PID - 8414. Идентификатор родителя - 841 и называется display-auto-brightness. Бабушка-дедушка - это оболочка (sh) с идентификатором процесса 839. Великим прародителем является cron с идентификатором процесса 795. [Править] cron.

Если вы хотите искать по идентификатору процесса 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).

0
ответ дан 15 August 2018 в 18:52
  • 1
  • 2
    – WinEunuuchs2Unix 6 March 2018 в 09:28
  • 3
    Точно - как вы находите родителя PID 807 с этим выходом? Вы не можете, потому что он не включает родителя 807. – Olorin 6 March 2018 в 10:41
  • 4
    @Olorin Родитель cron - systemd, который является PID 1. Я не думаю, что вы можете убить PID 1. – WinEunuuchs2Unix 6 March 2018 в 15:09
  • 5
    Я ничего не сказал об убийстве. Чтобы уточнить, теперь вы утверждаете, что если первая строка pstree или grepping для имени команды всегда будет давать родительский PID? – Olorin 6 March 2018 в 17:14

Другие вопросы по тегам:

Похожие вопросы: