7つのサブプロセスをさらに開始するbashで仮想プロセスを開始する方法

7つのサブプロセスをさらに開始するbashで仮想プロセスを開始する方法

すべての子プロセス情報を次の形式で記録するbashスクリプトを作成しようとしていますが、プロセスに6つ以上の子がある場合にのみ情報を記録する必要があります。

PID PPID 評価
10 9 1(子供用)
9 8 2(上位を示す)
8 7 3(祖父母用)
Pstree -ps 10 should display:
dummy1---dummy2---dummy3---dummy4---dummy5---dummy6---dummy7

上記の方法で仮想プロセスをどのように起動できますか?

正直なところ、私はbashスクリプトについて何も知らず、私ができる唯一のことは特定のユーザーのPIDを表示することです。

while read -r processId;
do
    echo $processId
done <<< "$(ps -u $USER -o pid)"

各PIDを繰り返して6つ以上のサブアイテムがあることを確認する必要がありますが、その前に6つのサブプロセスを手動でトリガーしてスクリプトを起動してテストしようとしています。

ベストアンサー1

7つのサブアイテムでスクリプトを起動するには、次のように使用できます。

#!/bin/bash

if [[ "$#" -ne 1 ]]; then
    set -- 7
fi

if [[ "$1" -gt 2 ]]; then
    "$0" "$(($1 - 1))"
else
    sleep 120
fi

あるいはもう少し簡潔に言えば、

#!/bin/bash

[[ "$#" -ne 1 ]] && set -- 7

[[ $1 -gt 2 ]] && $0 $(($1 - 1)) || sleep 120

引数が指定されていない場合、または引数が多すぎる場合は、引数を7に設定します。次に、引数が2より大きい場合は常に引数を減らし、同じスクリプトを実行するサブプロセスを開始します。パラメータが2に達すると、2分間スリープモードが実行されます。 (最後のスクリプトとsleep合計もそれぞれ1つとして計算されるため、2つに制限されます。)

$ ./dummy &
$ pstree -p 1800554
dummy(1800554)───dummy(1800561)───dummy(1800563)───dummy(1800566)───dummy(1800567)───dummy(1800570)───sleep(1800572)

パラメーターを変更して、異なる数の子孫を要求できます。

$ ./dummy 6 &

これは、各「世代」で複数の子を開始するように拡張できます。

#!/bin/bash

[[ "$#" -ne 2 ]] && set -- 1 7

for (( i = 0; i < $1; i++ )); do
[[ $2 -gt 2 ]] && $0 $1 $(($2 - 1)) || sleep 120 &
done
wait

次のように実行

./dummy 3 2 &

それぞれ3人の子供を持つ2つの世代を始めます。

おすすめ記事