Python을 실행하는 쉘 스크립트가 있습니다.
시작 파일
# Setup environment
cd ~/foobar/ && \
python3 -m venv env && \
source env/bin/activate && \
pip install -q -r requirements.txt && \
find . -maxdepth 1 -type f -name "*.py" | xargs pylint
# Run scripts
python ~/foobar/main.py
ctrl+c
터미널에 있으면 Python이 올바르게 닫힙니다. 하지만 그렇게 하면 pkill -9 start.sh
메시지가 표시되지만 Killed
Python은 여전히 실행 중입니다. 호출 스크립트가 종료되면 Python 스크립트를 종료할 수 있는 방법이 있습니까?
답변1
흥미로운 질문: Python 스크립트를 죽이는 것은 무엇입니까? 이를 사용하여 bash 프로세스를 종료하면 SIGKILL
확실히 Python 스크립트에는 아무 작업도 수행되지 않습니다.
기본 bash 프로세스가 아직 존재하는지 주기적으로 확인하는 백그라운드 프로세스를 시작하고, 사라질 경우 Python 스크립트를 종료할 수 있습니다.
Python 스크립트를 수정할 수 있는 경우 주기적으로 상위 항목이 사라졌는지 확인하고(가장 쉬운 방법: 상위 PID가 1인지 확인) 자체 종료할 수 있습니다. 이렇게 실수로 체커를 죽여도 아무런 문제가 발생하지 않습니다...
가장 좋은 해결책은 아마도 두 개의 스크립트 내에 있을 것입니다. bash 스크립트를 (일반 또는 임시 참조 man systemd-run
) SystemD 서비스 로 실행 하고 이를 사용하여 systemctl
스크립트를 종료할 수 있습니다(즉, 전체 cgroup 종료).