如何批量启动后台任务?

如何批量启动后台任务?

我有这样的文件:

ls

mate30pro5g.py Mathematica.py opencv.py

我知道这个命令可以启动后台任务:

python3 mate30pro5g.py &

现在我想通过这个命令启动多个任务:

ls *.py | xargs -n1 -i python3 {} &

但我发现我只启动了一项后台任务..我错过了什么?


附:请注意我的所有.py文件都有无限循环..

答案1

问题是&由调用 shell 解释的,这不会传输到 xargs 。

所以你必须调用 bash 来使用你的 args 执行 python3 。

解决方案:

ls *.py | xargs -n1 -i bash -c 'python3 {} &'

一个例子:

root@debian:/# ls -1d /etc/rc* | xargs -n1  -i bash -c  'sleep 90 & echo {} '
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d
/etc/rcS.d
root@debian:/# ps faux | grep sleep
root       494  0.0  0.0   4184   704 pts/0    S    20:54   0:00 sleep 90
root       496  0.0  0.0   4184   672 pts/0    S    20:54   0:00 sleep 90
root       498  0.0  0.0   4184   652 pts/0    S    20:54   0:00 sleep 90
root       500  0.0  0.0   4184   648 pts/0    S    20:54   0:00 sleep 90
root       502  0.0  0.0   4184   672 pts/0    S    20:54   0:00 sleep 90
root       504  0.0  0.0   4184   656 pts/0    S    20:54   0:00 sleep 90
root       506  0.0  0.0   4184   648 pts/0    S    20:54   0:00 sleep 90
root       508  0.0  0.0   4184   684 pts/0    S    20:54   0:00 sleep 90
root       510  0.0  0.0  11108   948 pts/0    S+   20:54   0:00 grep sleep

另一个解决方案,因为您想通过 jobs 管理所有流程。您需要创建一个包含所有命令的大字符串并调用eval它。

CMD=$( ls *py | xargs -n1  -i echo ' python3 {} & ' )
eval $CMD

或者

eval $( ls *py | xargs -n1  -i echo ' python3 {} & ' )

相关内容