查找特定进程的子进程数

Gre*_*bet 6 bash process

我有一个 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
Run Code Online (Sandbox Code Playgroud)

Bar*_* IO 4

ps -eo ppid= | grep -Fwc $pid
Run Code Online (Sandbox Code Playgroud)

如果您grep不支持-w

ps -eo ppid= | tr -d '[:blank:]' | grep -Fxc $pid
Run Code Online (Sandbox Code Playgroud)

或者

ps -eo ppid= | awk '$1==ppid {++i} END {print i+0}' ppid=$pid
Run Code Online (Sandbox Code Playgroud)

或(破坏位置参数)

set $(ps -eo ppid=); echo $#
Run Code Online (Sandbox Code Playgroud)

请注意,这不是原子的,因此如果某些进程在收集数据所需的短时间内死亡并且其他进程产生,则计数可能是错误的。