我有一个 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[@]}