프로세스 트리 탐색

프로세스 트리 탐색

프로세스가 계층 구조로 구성되어 있다는 것을 알고 있습니다. 따라서 하위 트리의 루트까지 상위 프로세스를 추적하여 특정 프로세스가 계층 구조의 특정 하위 트리에 속하는지 확인하는 작업을 구현하려는 경우 비용이 많이 드는 제안일까요?

답변1

두 개의 PID가 있고 하나가 다른 하나의 자손인지 알고 싶은 것 같습니다. 그렇다면 다음을 사용할 수 있습니다.

#!/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"

원본 게시물: 최종 목표가 무엇인지에 따라 다릅니다. 예를 들어 두 프로세스가 동일한 터미널 세션에서 시작되었는지 확인하려는 경우 옵션을 사용 -o하고 ps세션 그룹 ID를 인쇄하도록 지시할 수 있습니다(로그인 셸은 항상 새 세션을 시작하고 모든 하위 항목은 해당 세션을 가져옵니다). ID).

다른 목적이 있거나 사례가 비로그인 프로세스를 설명해야 하는 경우 구문 분석된 출력이 ps아마도 가장 좋은 접근 방식일 것입니다. 예를 들겠습니다. awk그러나 귀하가 무엇을 찾고 있는지 잘 모르겠으므로 어떤 출력이 귀하의 요구에 가장 적합한지 알 수 없습니다.

관련 정보