프로그램을 시작하고 닫는 .sh 스크립트를 시작할 수 있습니까?

프로그램을 시작하고 닫는 .sh 스크립트를 시작할 수 있습니까?

그래서 이것이 의미가 있는지 확실하지 않으므로 자세히 설명하겠습니다.

./frontend를 사용하여 시작할 수 있는 이 프로그램(프런트엔드)이 있습니다. 터미널은 입력할 때까지 프로그램에 유지됩니다! (또는 Ctrl C). 이것이 내가 하고 싶은 일이다

./frontend.sh 
Wait 30
!

그런데 프로그램에 막혔어요. 또한 다른 터미널에서 Killall 프런트엔드를 사용하여 이를 종료할 수도 있지만 스크립트에서 이를 수행하는 데는 도움이 되지 않습니다. 이 문제를 극복할 수 있는 방법이 있나요?

답변1

달리 명시하지 않는 한, 쉘은 각 명령을 순차적으로 실행합니다. 스크립트가 를 호출 frontend.sh하고 frontend.sh종료되지 않으면 쉘은 다음 명령을 실행하지 않고 스크립트가 종료될 때까지 기다립니다.

목표를 달성하는 한 가지 방법은 frontend.sh백그라운드에서 연산자를 시작한 &다음 해당 프로세스 ID(특수 매개변수를 통해 얻을 수 있음 $!) 를 kill명령에 전달하여 연산자를 종료하는 것입니다.

#!/bin/sh

# start frontend.sh in the background
./frontend.sh &

sleep 30

# the special parameter $! holds the process ID of the last background process
if kill $!; then
    echo "frontend.sh was killed, do more work here"
else
    echo "failed to kill frontend.sh, handle the error here"
fi

관련 정보