Пересеките дерево процесса

[117277] Рассматривали ли вы предложение, основанное на iCloud [117627] Keynote [117628]. Очевидно, что это не ЗАМЕЧАНИЕ или ОТКРЫТОЕ, но это даст Вам некоторые из тех, что Apple polish под Linux.[117278].
2
05.05.2015, 02:52
1 ответ

Похоже, что у вас два ПИД-регулятора, и вы хотите знать, является ли один из них потомком другого. Если да, то вы можете использовать следующее:

#!/bin/bash

# Checks the process tree checking to see if PID $1 is an ancestor of
# PID $2.  Returns true/false (0/1).
# (Needs error handling to determine if $1 and $2 are provided and both
# are numeric.  Left as an exercise for the reader.)

ps -ea -o pid,ppid |
   awk '{ parent[$1] = $2 }
        END {  if (parent[start] == "")
                   exit 1
               while (lookfor != parent[start] && start != 1)
                   start = parent[start]
               exit start==1 ? 1 : 0
            }' lookfor="$1" start="$2"

Original post: Это зависит от того, какова ваша конечная цель. Если Вы пытаетесь определить, были ли запущены два процесса, например, с одной и той же терминальной сессии, то Вы можете использовать -o опцию ps и сказать ей, чтобы она распечатала идентификатор группы сеансов (оболочка входа всегда начинает новую сессию, и все потомки получают этот идентификатор сессии).

Если вы имеете в виду какую-то другую цель, или ваша ситуация должна учитывать не входящие процессы, то анализ вывода ps, вероятно, является лучшим способом. Я бы привел пример в awk, но я не уверен, что вы ищете, так что не знаю, какой вывод лучше всего подходит для ваших нужд.

2
27.01.2020, 22:12

Теги

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