특정 프로세스의 하위 프로세스 수 찾기

특정 프로세스의 하위 프로세스 수 찾기

일부 하위 프로세스를 생성하지만 한 번에 두 번 이상 생성하지 않는 Python 스크립트가 있습니다 n.

주어진 시간에 하위 프로세스 이상이 없고 n일반적으로 n프로세스가 실행 중인지 확인하기 위해 쉘 스크립트를 작성하고 싶습니다.

쉘 스크립트에 Python 프로그램의 PID가 있는 경우 해당 PID가 현재 소유하고 있는 하위 프로세스 수를 어떻게 확인할 수 있습니까? 예를 들어

python script.py &
pid=$!
while true
do
    # do something that prints number of subprocesses of
    # the process $pid to stdout
    sleep 1
done

답변1

ps -eo ppid= | grep -Fwc $pid

grep지원하지 않는 경우 -w:

ps -eo ppid= | tr -d '[:blank:]' | grep -Fxc $pid

또는

ps -eo ppid= | awk '$1==ppid {++i} END {print i+0}' ppid=$pid

또는 (위치 매개변수 중단)

set $(ps -eo ppid=); echo $#

이는 원자적이지 않으므로 데이터를 수집하는 데 걸리는 짧은 시간 내에 일부 프로세스가 종료되고 다른 프로세스가 생성되는 경우 개수가 잘못될 수 있습니다.

답변2

노력하다 ps --ppid ${pid} --no-headers | wc --lines.

답변3

만약에pgrep사용 가능, -P상위 pid[ ]로 필터링됨:

sproc_pids=( $(pgrep -P $pid) ) && echo ${#sproc_pids[@]}

관련 정보