백그라운드 프로세스를 다시 로드하는 방법은 무엇입니까?

백그라운드 프로세스를 다시 로드하는 방법은 무엇입니까?

백그라운드에서 실행하고 싶은 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를 사용하여 정상적으로 종료할 수 있습니다.

관련 정보