스크립트를 종료하지만 현재 실행 중인 프로그램이 종료되도록 허용합니다.

스크립트를 종료하지만 현재 실행 중인 프로그램이 종료되도록 허용합니다.

무한 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실제로 죽이는 것이 아니라 죽이거나 죽이지 않을 것이 없으면 실패 코드로 종료한다는 의미입니다.

관련 정보