다음과 같은 파일이 있습니다.
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 {} & ' )