Bash에서 모든 프로세스의 PID, PPID, 깊이 및 기타 정보를 검색하는 방법은 무엇입니까?

Bash에서 모든 프로세스의 PID, PPID, 깊이 및 기타 정보를 검색하는 방법은 무엇입니까?

다음 코드를 사용하여 7개의 가상 하위 프로세스를 트리거하겠습니다.

#!/bin/bash

if [[ "$#" -ne 1 ]]; then
    set -- 7 #To set command line argument to 7 when arguments aren't provided
fi

if [[ "$1" -gt 2 ]]; then
    "$0" "$(($1 - 1))" #Execute same script by passing a number(decrementing)
else
    sleep 120
fi

따라서 pstree -pc 101(101이 위 스크립트의 첫 번째 프로세스의 pid라고 가정하면) 다음과 같이 표시됩니다.

dummy(101)──dummy(102)──dummy(103)──dummy(104)──dummy(105)──dummy(106)──sleep(107)

가상 프로세스의 정보를 다음 형식으로 표시하는 방법은 다음과 같습니다.

PID PPID 등급
107 106 1(어린이용)
106 105 2(상위를 나타냄)
105 104 3 (조부모용)
104 103 4
103 102 5
102 101 6
101 100 7

솔직히 저는 Bash 스크립팅을 모릅니다. 방금 다음 명령을 사용하여 사용자 프로세스의 PID를 표시하는 방법을 배웠습니다.

ps -u $USER -o user,pid,ppid,lstart,cmd

답변1

재귀를 사용하여 필요한 정보를 얻을 수 있습니다.

#!/usr/bin/env bash

get_child()
{
  local -i pid=0 ppid=$1 depth=$2 parentId=$3
  echo $ppid $parentId $depth

  while read -r pid; do
    echo $ppid
    ((pid)) && get_child $pid $((depth + 1)) $ppid
  done < <(ps -o pid= --ppid $ppid)
}

get_child $1 0 0

관련 정보