2011-03-08 5 views
29

bash에서 100 개의 프로세스를 시작하고 싶지만 for 문은 & 기호를 좋아하지 않는 것 같습니다. 구문 오류가 발생했습니다. 여기에 내가 가지고있는 내용이 있습니다 :Bash에서 여러 프로세스를 시작하는 방법

echo "Spawning 100 processes" 
for i in {1..100} 
do 
    ./my_script.py & 
done 

편집 : 나는이 코드를 copypasting했다& 문자가 불법 이유, 그건.

+0

. 아마 당신은 전체 스크립트와 my_script.py를 붙여 넣을 수 있고, 다른 스크립트일지도 모른다. –

+0

저에게 잘 보입니다 ... –

+0

무엇을 오류 ?. 나를 위해 일하고. 어떤 버전의 bash? – Zimbabao

답변

42
echo "Spawning 100 processes" 
for i in {1..100} ; 
do 
    (./my_script &) 
; done 
+3

무엇? 세미콜론은 중복되어 OP의 코드 스 니펫이 구문 상 유효하다는 점을 고려할 때 여기서 괄호로 묶는 효과가 무엇인지 확신 할 수 없습니다. –

+11

그런 식으로 쓰는 것이 좋습니다. 코드를 복사하여 대화 형 셸에 복사하여 실행할 수 있습니다. my_script 호출을 식 목록과 세미콜론에 넣지 않고도 작동하지 않습니다.그것은 중복 될 수도 있지만 그 이유가 있습니다. 나는 OP가 쉘의 대화 형 모드에서 이것을 시도했을지도 모른다고 생각한다. #가 주어진 스크립트를 제공하지 않았다는 것을 감안할 때! – datenwolf

+0

() 사이에 전화를 동봉하여 컷을 만들었습니다 !! 고마워, – fcm

0

다른 사람이 지적한 것처럼 스 니펫은 유효한 코드입니다. 이것은 당신이 필요로하는 것입니다 ...하지만 두 번 포크 할 수있는 경우

확실하지 :

이 스크립트가 그것을에서 launced 된 쉘이 파괴 된 경우에도 실행하게됩니다
((/complete/path/my_script.py &) &) 

.

+0

질문에 답변하지 않습니다. –

3

이것이 작동하지 않는 이유는 내가 생각할 수있는 유일한 이유는 실제로 다른 쉘 (예 : /bin/sh)을 사용했다는 것입니다.

파일 상단에 #!/bin/bash이 있습니까? 예인 경우 #!/bin/bash -x (추적을 켜려면 설명서 페이지에서 설명한대로 xtrace으로 변경하십시오.) 정확한 구문 오류와 함께 관련 출력을 질문에 붙여 넣으십시오. 그렇지 않은 경우 문제가 될 수 있습니다. ;-)

내가 생각할 수있는 또 다른 가능성은 파일에 ^M 자 (DOS 줄 끝)가있는 경우이며, 다음과 같은 오류가 발생할 수 있습니다 (어떤 줄이 있는지에 따라 다릅니다). 주위에 흩어져, 또는 스크립트)는 #! 행으로 시작하는 경우에 따라 다음과 같이

-bash: ./myscript.sh: /bin/bash^M: bad interpreter: No such file or directory 
'/myscript.sh: line 2: syntax error near unexpected token `do 

This page 그것은 드문 경우에 작동합니다 그래서 약간 수정 한있는 (그들을 제거 할 수있는 좋은 펄 스 니펫 (snippet)을 가지고 당신은 줄의 중앙에 ^M의 표류가 있습니다) :

GNU와
8

은 당신이 할 수있는 병렬 :

echo "Spawning 100 processes" 
parallel -j0 ./my_script.py ::: {1..100} 

없이는 CPU 당 하나 개의 프로세스를 생성합니다 -j0.

자세한 내용은 소개 동영상보기 :이 구문 오류가 발생하지 않아야 https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

+1

이 답변이 가장 좋습니다. –

관련 문제