查找特定进程的子进程数

查找特定进程的子进程数

我有一个 Python 脚本,它会生成一些子进程,但一次不会超过n一次。

我想编写一个 shell 脚本来确认它在任何给定时间都不超过n子进程,而且通常它都有n正在运行的进程。

如果我在 shell 脚本中拥有 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可用,按父 pid[ -P] 过滤:

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

相关内容