대규모 원격 클러스터의 엔터프라이즈 설정을 위해 생성된 Python 프로젝트 작업 중입니다(복구/멱등성 기능은 현재 지원되지 않음).
Python 스크립트를 실행하는 동안 언제든지 shell/ssh 명령이 중단되면 명령을 수동으로 실행하고 성공적으로 완료한 후 중단된 하위 프로세스를 종료하려고 합니다. 상위 프로세스가 하위 프로세스로부터 성공 응답 코드를 받은 경우에만 계속됩니다(Python 스크립트 코드는 편집할 수 없습니다).
샘플 코드:
import subprocess
try:
response = subprocess.run(["sleep 300;"], shell=True)
print('return code: ' + str(response.returncode))
response.check_returncode()
print('Command completed successfully.')
except Exception as e:
print('Error occoured: ' + str(e))
아이를 죽여라:
% ps -ef | grep sleep
501 6904 6719 0 11:45AM ttys006 0:00.03 [email protected]/.../Python bash_sleep.py
501 6905 6904 0 11:45AM ttys006 0:00.00 sleep 300
% kill -15 6905
최종 응답:
% python3 bash_sleep.py
return code: -15
Error occoured: Command '['sleep 300;']' died with <Signals.SIGTERM: 15>.
서브쉘 프로세스를 종료하지만 Python 프로세스에 0 응답 코드를 보내는 방법이 있습니까?
답변1
이 작업을 수행하는 데 사용할 수는 없지만 kill
디버거를 연결할 수 있는 경우 이를 사용하여 중단된 프로세스를 "좋게" 종료할 수 있습니다.
$ python3 bash_sleep.py
다른 터미널에서...
$ gdb --pid ${the sleep pid}
>>> call exit(0)
>>> quit
이로 인해 대상 프로세스가 종료되고 상위 프로세스에 0이 반환됩니다. 또한 C 라이브러리에 등록된 종료 핸들러도 호출합니다.