하위 쉘 프로세스를 종료하지만 상위 프로세스에 0 응답 코드를 보냅니다.

하위 쉘 프로세스를 종료하지만 상위 프로세스에 0 응답 코드를 보냅니다.

대규모 원격 클러스터의 엔터프라이즈 설정을 위해 생성된 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 라이브러리에 등록된 종료 핸들러도 호출합니다.

관련 정보