![如何在 AIX 中像 xargs 一样带有“--max-procs”的进程队列?](https://linux22.com/image/73583/%E5%A6%82%E4%BD%95%E5%9C%A8%20AIX%20%E4%B8%AD%E5%83%8F%20xargs%20%E4%B8%80%E6%A0%B7%E5%B8%A6%E6%9C%89%E2%80%9C--max-procs%E2%80%9D%E7%9A%84%E8%BF%9B%E7%A8%8B%E9%98%9F%E5%88%97%EF%BC%9F.png)
考虑一个简单的处理队列,例如:
cat list.txt | xargs -n1 -P20 process.sh
(-P 或 --max-procs)
如何在 AIX 中拥有类似的东西?
答案1
您可以通过用 ksh 脚本替换 xargs 来模拟同样的事情。例如:
#!/bin/ksh
nproc=0 max=20
trap 'let nproc--' sigchld
while read file
do while [ $nproc -ge $max ]
do sleep 1
done
process.sh "$file" &
let nproc++
done
wait
shell 变量nproc
计算它在后台运行的进程数。当进程结束时,shell 捕获 SIGCLD 信号以减少变量。睡眠轮询循环停止的进程多于max
正在启动的进程。