내 스크립트(.ksh):
cmd1 & cmd2
cmd1
백그라운드에서 실행하고 cmd2
시작 후에만 실행을 시작하고 싶습니다 . cmd1
그러나 스크립트를 실행하면 cmd2
이전에 시작되어 cmd1
문제가 발생합니다.
이 문제를 어떻게 해결할 수 있나요?
답변1
조건부 연산자를 사용하면 &&
다른 실행이 시작되기 전에 하나의 실행이 "완료"되도록 강제할 수 있습니다. ("완료"는 실제로 프로세스를 백그라운드로 보내기 때문에 "완료"를 따옴표로 묶었습니다.)
하지만
$ (echo "foo" &) ; echo "bar"
출력될 수도 있다
bar
foo
다음과 같은
$ (echo "foo" &) && echo "bar"
출력됩니다
foo
bar
왜냐하면 쉘은 두 번째 명령을 실행하기 전에 첫 번째 명령의 종료 상태를 결정해야 하기 때문입니다.
답변2
가장 간단한 해결책은 작은 것을 추가하는 것입니다 sleep
.
cmd1 & sleep 1 && cmd2
더 안정적인 방법은 래퍼를 사용하여 실제로 실행되고 계속되는지 cmd2
확인하는 것 입니다.cmd1
그것은 다음과 같습니다:
while ! pgrep cmd1; do
sleep 1
done
cmd2
while !
BTW로 교체할 수 있습니다 until
.