백그라운드에서 실행하고 싶은 Python 스크립트가 있습니다. 그래서 저는 이렇게 합니다:
$ nohup python script.py &
스크립트를 자주 변경하면 프로세스를 종료하고 스크립트를 다시 실행해야 합니다.
$ kill -9 <pid_of_bg_process>
$ nohup python script.py &
프로세스를 종료하지 않고 다시 로드할 수 있습니까?
답변1
짧은 대답 - 아니요.
긴 답변: 실제로 Python 인터프리터를 호출하고 있습니다. 인터프리터는 script.py를 로드하고 구문 분석합니다.
스크립트를 변경하면 인터프리터가 어떤 부분이 변경되었는지 알 수 없기 때문에 파일을 다시 로드하고 처음부터 시작해야 합니다.
이제 목표가 Python에 스크립트를 다시 로드/다시 시작하라는 신호를 보내는 것이라면 이를 쉘 스크립트로 래핑할 수 있습니다.
#!/bin/sh
LINE="python script.py"
stop()
{
pkill -f "$LINE"
}
clean()
{
stop
exit 0
}
trap stop 1
trap clean 9 15
while true
do
$LINE &
wait
done
이제 쉘 스크립트를 시작할 수 있습니다(원하는 경우 백그라운드에서 nohup을 사용하여). HUP 신호를 보내면 Python 프로세스가 다시 시작됩니다.
래퍼 프로세스를 종료하면 Python 스크립트도 종료됩니다.
내 스크립트를 테스트하지는 않았지만 아이디어는 명확해야 합니다.
답변2
kill -USR1 PID 또는 pidof script.py
-9를 사용하여 프로세스를 종료할 수 있으며, -15를 사용하여 정상적으로 종료할 수 있습니다.