![스크립트를 종료하지만 현재 실행 중인 프로그램이 종료되도록 허용합니다.](https://linux55.com/image/158885/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%A2%85%EB%A3%8C%ED%95%98%EC%A7%80%EB%A7%8C%20%ED%98%84%EC%9E%AC%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%B4%20%EC%A2%85%EB%A3%8C%EB%90%98%EB%8F%84%EB%A1%9D%20%ED%97%88%EC%9A%A9%ED%95%A9%EB%8B%88%EB%8B%A4..png)
무한 while 루프에서 명령을 실행하는 bash 스크립트가 있습니다. 스크립트는 다음과 같습니다:
while :
do
python3 my_program.py
done
Python 프로세스를 중단하지 않고 터미널에서 이 while 루프를 종료하는 쉬운 방법이 있습니까? 즉, Python 프로세스가 완료되고 루프가 종료됩니다.
다른 말로 하면 다음과 같습니다.종료 조건이 터미널 입력인 while 루프가 있습니까?
답변1
SIGINT
스크립트를 캡처하고 루프 종료 조건을 설정할 수 있습니다. 프로그램을 실행 setsid
하면 SIGINT
+CTRLC
#! /bin/bash
STOPFILE=/tmp/stop_my_program
rm -f $STOPFILE
trap "touch $STOPFILE" INT
while [ ! -f $STOPFILE ]
do
setsid python3 my_program.py
done
rm -f $STOPFILE
답변2
프로세스를 백그라운드에 두고 다음 루프를 시작하기 전에 프로세스가 완료될 때까지 기다릴 수 있습니다. 이렇게 하면 Python 프로세스를 종료하지 않고 루프를 종료할 수 있습니다.
while : ; do
python3 my_program.py &
while true; do
kill -0 %1 || break
sleep 1
done
done
그런 다음 C-C
(ctrl-c) 루프를 중단하십시오.
kill -0
실제로 죽이는 것이 아니라 죽이거나 죽이지 않을 것이 없으면 실패 코드로 종료한다는 의미입니다.