次のコードを使用して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