간단하게 두세가지 작업을 수행해야 하는데 이 작업들이 모두 끝나는 시점에 수행해야 하는 작업이 있습니다. 보통 두세가지 작업을 동시에 하려면 &(Ampersand)를 붙여 백그라운드 작업으로 돌리면 해결될 문제입니다. 하지만 모두 끝나는 시점에 무언가를 해야 한다면 조금 생각해볼 문제가 되겠죠.
생각을 해보면 작업을 수행할때마다 PID값을 알아내어 이 PID가 끝나길 기다렸다가 끝나는대로 다음 작업을 수행하면 될 것 같습니다. 이런 경우를 위해 wait라는 명령이 bash쉘에 Builtin되어있습니다. 간단하게 다음의 예제를 확인해 보겠습니다.
#!/bin/sh echo "예제를 시작합니다" sleep 10 & sleep 15 & echo "모든 명령이 병렬로 실행되었습니다" WORK_PID=`jobs -l | awk '{print $2}'` wait $WORK_PID echo "모든 명령이 종료되었습니다"
이 예제를 실행해 보면 다음과 같은 결과를 보여줍니다.
예제를 시작합니다 모든 명령이 병렬로 실행되었습니다 모든 명령이 종료되었습니다
jobs명령의 경우 -l옵션을 붙여주게 되면 PID값도 함께 출력되게 됩니다. 이것을 이용하면 굳이 매번 프로세스를 실행할때마다 PID를 저장하려는 노력을 하지 않아도 됩니다.
[eye@theeye ~]# sleep 500 & [1] 4962 [eye@theeye ~]# jobs [1]+ Running sleep 500 & [eye@theeye ~]# jobs -l [1]+ 4962 Running sleep 500 &
이런 명령을 활용하여 복잡한 여러 스크립트들의 수행속도를 꽤 많이 단축시킬 수 있었습니다.