모든 하위 프로세스 정보를 다음 형식으로 기록하는 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 &
각각 세 명의 자녀를 둔 두 세대를 시작하십시오.