Batch-Jobs
如何批量啟動後台任務?
我有這樣的文件:
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 {} & ' )