Как уже упоминалось, синтаксический анализ сложных структурированных данных является предпочтительным с соответствующим 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 по умолчанию.
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).
Используйте 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)
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
cat /proc/$PPID/cmdline
$PPID
определяется оболочкой, это PID родительского процесса /proc/
, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm
, вы эхо отзываете имя команды 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)
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).
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
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
. Идентификатор родителя - 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).
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
cat /proc/$PPID/cmdline
$PPID
определяется оболочкой, это PID родительского процесса /proc/
, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm
, вы эхо отзываете имя команды 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)
Используйте 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)
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
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
. Идентификатор родителя - 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).
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
cat /proc/$PPID/cmdline
$PPID
определяется оболочкой, это PID родительского процесса /proc/
, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm
, вы эхо отзываете имя команды 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)
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).
Используйте 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)
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).
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
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
. Идентификатор родителя - 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).
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
cat /proc/$PPID/cmdline
$PPID
определяется оболочкой, это PID родительского процесса /proc/
, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm
, вы эхо отзываете имя команды 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)
echo $PPID
, если вам нужна команда из этого родительского pid:
cat /proc/$PPID/comm
if вам нужна полная командная строка (со всеми опциями):
cat /proc/$PPID/cmdline
$PPID
определяется оболочкой, это PID родительского процесса /proc/
, у вас есть несколько каналов с PID каждого процесса. Затем, если вы cat /proc/$PPID/comm
, вы эхо отзываете имя команды 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)
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).
1
. Я не думаю, что вы можете убить PID 1.
– WinEunuuchs2Unix
6 March 2018 в 15:09