nohup 백그라운드 프로세스가 종료되는 이유는 무엇입니까?


10

원격 세션을 통해 쉘 스크립트를 시작하려고 시도했는데 명령을 사용하여 백그라운드에서 프로세스를 시작합니다.

nohup python3 run.py > nohup.out &

원격 세션이 닫히면 다음 메시지와 함께 프로세스가 종료됩니다.

잡힌 신호 SIGHUP

SIGHUP이 포착되었지만 디몬이 제거되지 않았습니다. 종료합니다.

이해가 안 돼요. nohup &를 사용하여 백그라운드에서 시작했을 때 프로세스가 종료되는 이유는 무엇입니까?


1
쉘 작업 제어의 예기치 않은 모든 동작으로 인해 혼란 스러웠습니다. 이제는 작업을 완전히 tmux무시하고 무시 nohup하거나 백그라운드 작업을 완전히 수행합니다.
Siyuan Ren

답변:


10

파이썬 프로그램이 취소 nohup됩니다.

nohup행업 신호를 무시한 SIG_IGN다음 동일한 프로세스에서 프로그램을 체인로드합니다.

Python 프로그램 은 자체 신호 처리기를 설치하여 행업 신호에 대한 신호 처리를 즉시 재설정 합니다. 그 핸들러는 내부 함수 (잘 설계되지 않았고, 내가 본 것이라면 약간의 가정에 기초하여 잘 설계되지 않았 음)를 확인하고 행업 신호를 수신 할 때 적절한 조치가 해당 메시지를 인쇄하는 것으로 결정합니다. 종료합니다.

의도적으로 파이썬 프로그램은 사용할 nohup수 없습니다 . 작업 제어 쉘 및 POSIX 세션 / 작업 시맨틱이있는 시스템 disown에서 쉘이 행업 신호를 처음으로 보내지 못하도록 작업을 수행해야합니다.

시스템 운영 체제에서는 충분하지 않습니다. 시스템 사용자는 사용자 공간 로그인 세션 메커니즘에 약간의 귀를 기울 였기 때문에 시스템 연결을 끊지 않고 시스템 종료 신호를 보내는 시스템 메커니즘을 확인해야합니다. 모든 로그 아웃시 로그인 세션도 시작되지 않습니다.)

추가 자료


3
그것을 수행하는 Python 프로그램입니까, 아니면 조용히 등을 돌리는 Python 인터프리터 (/ 런타임 환경)입니까?
ilkkachu

또한 Mac OS에서 ssh 세션에서 로그 아웃하면 사용을 시작한 경우에도 쉘 작업이 중단됩니다 nohup. 그 치료법을 찾지 못했습니다
imhotap

문제가 신호 처리기 인 경우 OP는 단순히 신호 처리기를 프로세스를 종료하지 않는 처리기로 변경할 수 있습니다. 이 신호 처리기를 설치하는 사람과 독립적으로 작동해야합니다. ssh와 관련하여 추가하고 싶습니다. 때때로 프로세스가 살아 있더라도 문제가있을 수 있습니다. 몇 년 전에 나는 약간의 권한 오류를 이해하려고 노력하는 데 상당한 시간을 잃었고 결국 범인은 Kerberos였습니다 .ssh 세션이 닫히면 토큰이 만료되었으므로 대신 토큰을 사용해야했습니다. ssh 세션의.
Bakuriu

@JdeBP 나는 노력 setsid nohup python3 run.py > nohup.out &, setsid는 이 문제를 해결했다. 이것이 적절한 접근법입니까?
Mostwanted Mani
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.