2013-07-15 2 views
0

쉘 스크립트를 통해 2 개의 스크립트를 병렬로 실행할 수 없습니다.병렬로 여러 스크립트를 실행할 수 없습니다.

나는 script1.sh, script2.sh 및 installpackages.sh와 같은 세 개의 스크립트가 있습니다.

내 요구 사항은 script1.sh이고 script2.sh는 백그라운드에서 병렬로 실행해야하며 script1.sh 및 script2.sh 완료 후 installpackages.sh가 실행되어야합니다.

selid1t601.xayybol.74> vi script.sh 
exec script1.sh & 
exec script2.sh & 

installpackages.sh 

당신은 내가 병렬로 script1.sh 및 script2.sh을 실행할 수있는 방법을 제안 해주십시오 수 있습니까?

답변

1

본질적으로 병렬로 실행되는 백그라운드에서 스크립트를 이미 실행하고 있으므로. 필요한 단계는 wait으로 최종 단계를 수행하기 전에 스크립트가 실행되었는지 확인하는 것입니다. 당신은 말할 필요 :

exec script1.sh & 
exec script2.sh & 
wait 
installpackages.sh 

을부터 manual :

대기

wait [jobspec or pid ...] 

기다립니다 각 프로세스 ID PID 또는 작업 스펙으로 규정 자식 프로세스까지 jobspec 마지막 명령의 종료 상태를 종료하고 반환합니다. 명령 대기 를 위해. 작업 스펙이 주어지면 작업의 모든 프로세스가 대기합니다. 인수가 제공되지 않으면 현재 활성 상태 인 모든 자식 프로세스가 대기하고 반환 상태는 0입니다. 도 jobspecPID 쉘의 활성 자식 프로세스를 지정하는 경우 반환 상태는이 경우 127

하지 않는다
1

exec입니다. 이렇게하면 현재 프로세스가 시작된 프로그램으로 바뀝니다. 단지

bash script1.sh & 
bash script2.sh & 

또는

./script1.sh & 
./script2.sh & 

처럼 실행하고 devnull 말처럼 뒤에 wait을 넣어.

+0

'exec'를 사용하면 필요한 프로세스 수가 줄어 듭니다. './script1.sh &'는 먼저 새로운 쉘을 포크하고, 그 쉘은'script1.sh'를위한 프로세스를 포크합니다.'exec ./script1.sh &'는 새로운 쉘을 포크하고, 그 쉘은 * 대체됩니다 *'script1.sh' 프로세스에 의해. – chepner

관련 문제