을 처리합니다파이썬 멀티와 자녀의 독립, 나는 다음과 같은 몇 가지 명령을 실행 장기 실행 자식 프로세스 산란 파이썬 터미널에서
from multiprocessing.process import Process
Process(target=LONG_RUNNING_FUNCTION).start()
이 명령의 반환을, 나는 다른 일을 할 수있다 파이썬 터미널이지만, 자식이 인쇄 한 내용은 여전히 파이썬 터미널 세션에 인쇄됩니다.
때 나는 그것을 중단 exit 명령 (중exit
또는
CTRL +
D로) 터미널을 종료합니다. 이 중단 동안
CTRL +
C을 누르면 하위 프로세스가 종료됩니다.
(posix kill
명령을 사용하여) 파이썬 터미널 프로세스를 수동으로 종료하면 하위 프로세스가 고아가 아닌 대신 출력이 계속 무시되어 실행됩니다. 내가 python -c
이 코드를 실행하면
, 아이가 종료하는 것은 대기 및 CTRL + C는 부모와 자식 모두를 죽인다.
부모가 종료되면 자식을 죽이는 python 구성을 실행하는 것은 어느 것입니까? 특히, python-mod_wsgi-apache 웹 서버가 자식 프로세스를 생성 한 다음 다시 시작하면 자식이 죽었습니까?
[제쳐두고, 터미널에서 생성 된 하위 프로세스를 분리하는 올바른 방법은 무엇입니까? 방법이 더 우아한 다음과 같은 이상이 있습니까 : Deliberately make an orphan process in python]
업데이트 : 아파치에서 실행중인 웹 서버에 의해 multiprocessing.Process
와 양산 파이썬 서브 프로세스는 아파치를 다시 시작할 때 살해하지 있습니다.
서브 프로세스는 시스템 호출을 디스패치하기위한 모듈로, 서브 프로세스를 사용하여 백그라운드 파이썬 태스크를 시작하는 것은 부적절한 것으로 보입니다. 좋은 python-deamon 라이브러리 (예 : python-deamon)를 사용 했습니까? – Zags
배경/전경 구분은 쉘의 작업 제어에만 적용됩니다. 일반적으로 프로세스 관리에 적용되는 용어를 사용하는 것은 이치에 맞지 않습니다. 좀 더 일반적인 맥락에서, 데몬 화는 프로세스가 스스로 수행하는 것으로,'subprocess.Popen '을 사용하여 그러한 프로세스를 시작하는 것은 전적으로 표준입니다. 'python-daemon'은 괜찮습니다; 그것은 성가신 API를 가지고 있지만, 전투 테스트를 거쳤으며, 후자의 품질은 중요합니다. 이런 종류의 일을 잘못하기 쉽기 때문입니다. – Alp