백그라운드 프로세스가 완료된 후 다른 프로세스 실행

백그라운드 프로세스가 완료된 후 다른 프로세스 실행

test.sh 파일에 반복 스크립트가 있고 백그라운드 프로세스가 완료된 후 "running_script2.sh" 스크립트를 실행하려고 하는데 이 작업을 시도했지만 작동하지 않습니다.

for id in 1 2 3
do
bash running_script1.sh $id &   (#complete 1 minute/looping)
done
wait
echo "running script2 ..."
bash running_script2.sh

근무 시간:

bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh

하지만 효율적이지 않음

답변1

사이에는 의미상 차이가 없습니다.

for id in 1 2 3
do
bash running_script1.sh $id &   (#complete 1 minute/looping)
done

그리고

bash running_script1.sh 1 &
bash running_script1.sh 2 &
bash running_script1.sh 3 &
wait
echo "running script2 ..."
bash running_script2.sh

time아래 데모 스크립트는 조건부 명령에 관계없이 3초 남짓 동안 실행됩니다(가능함 true) .false

#!/bin/sh -eu
for i in 1 2 3; do
    echo "sleep $i" > $i && chmod +x $i
done
if false; then
    for i in 1 2 3; do
        bash ./$i &
    done
else
    bash ./1 &
    bash ./2 &
    bash ./3 &
fi
wait

여전히 차이점이 있는 경우 게시해 주세요.맥웨이.

답변2

이것이 올바른 방법인지는 모르겠지만 screen을 사용하여 스크립트를 실행합니다.
screen은 bg에서 프로세스를 실행하는 가상 터미널입니다.

for id in 1 2 3
do
screen -d -m bash script1.sh $id
done
wait
echo "running script2 ..."
bash script2.sh

screen -d -m은 스크립트를 실행하고 스크립트가 완료되면 화면을 닫습니다.
screen을 사용할 때 script1의 출력을 표준 출력으로 가져올 수 없으므로 파일을 사용하여 script1의 출력을 저장합니다.

관련 정보