バックグラウンドタスクを一括で開始するには?

バックグラウンドタスクを一括で開始するには?

次のファイルがあります。

ls

mate30pro5g.py Mathematica.py opencv.py

このコマンドがバックグラウンド操作を開始できることを知っています。

python3 mate30pro5g.py &

それでは、次のコマンドで複数のタスクを開始したいと思います。

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

ところで、バックグラウンド作業が1つだけ始まったことがわかりました。何を逃したのですか?


添付:私のすべての.pyファイルには無限ループがあります。

ベストアンサー1

問題は&xargs に送信されないコールシェルによって説明されます。

したがって、引数としてpython3を実行するにはbashを呼び出す必要があります。

解決策:

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 {} & ' )

おすすめ記事