我的问题是如何改变这个代码,所以它只会使用4个线程/子进程?
TESTS="a b c d e" for f in $TESTS; do t=$[ ( $RANDOM % 5 ) + 1 ] sleep $t && echo $f $t & done wait
有趣的问题我试图用xargs这个,我找到了一种方法。
尝试这个:
seq 10 | xargs -i --max-procs=4 bash -c "echo start {}; sleep 3; echo done {}"
–max-procs = 4将确保一次运行不超过四个子进程。
输出将如下所示:
start 2 start 3 start 1 start 4 done 2 done 3 done 1 done 4 start 6 start 5 start 7 start 8 done 6 done 5 start 9 done 8 done 7 start 10 done 9 done 10
请注意,执行顺序可能不遵循您提交的顺序的命令。正如你可以看到2从1开始。