백그라운드 작업을 일괄적으로 시작하는 방법은 무엇입니까?

백그라운드 작업을 일괄적으로 시작하는 방법은 무엇입니까?

다음과 같은 파일이 있습니다.

ls

mate30pro5g.py Mathematica.py opencv.py

이 명령이 백그라운드 작업을 시작할 수 있다는 것을 알고 있습니다.

python3 mate30pro5g.py &

이제 다음 명령을 통해 여러 작업을 시작하고 싶습니다.

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

그런데 백그라운드 작업이 하나만 시작되었다는 것을 알았습니다. 무엇을 놓쳤습니까?


첨부된:내 모든 .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 {} & ' )

관련 정보