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

おすすめ記事