Batch-Jobs

如何批量啟動後台任務?

  • November 4, 2019

我有這樣的文件:

ls

mate30pro5g.py Mathematica.py opencv.py

我知道這個命令可以啟動後台任務:

python3 mate30pro5g.py &

現在我想通過這個命令啟動多個任務:

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

但我發現我只啟動了一項後台任務。我錯過了什麼?


**ps:**注意我所有的.py文件都有一個無限循環..

問題是&由呼叫 shell 解釋的,這不是傳輸到 xargs 。

所以你必須呼叫 bash 來執行 python3 和你 args 。

解決方案:

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

另一個解決方案,因為您想通過作業管理所有流程。您需要創建一個包含所有命令的大字元串並呼叫eval它。

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

或者

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

引用自:https://unix.stackexchange.com/questions/550131