Похоже, что у вас два ПИД-регулятора, и вы хотите знать, является ли один из них потомком другого. Если да, то вы можете использовать следующее:
#!/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
, но я не уверен, что вы ищете, так что не знаю, какой вывод лучше всего подходит для ваших нужд.