다중 처리 및 하위 프로세스를 사용하여 다른 인수와 함께 여러 외부 명령을 실행하는 Python 스크립트가 있습니다. 코드는 here입니다.GNU 화면 내의 Python은 화면이 꺼내지면 결국 유휴 상태가됩니다.
편의상이 스크립트는 GNU Screen 세션에서 실행됩니다. 이 스크립트가 실행중인 시스템에는 프로세스가 활성화 될 때까지 유휴 상태 인 12 개의 프로세서가 있습니다.
각 프로세스는 실행하는 데 몇 시간에서 며칠이 걸리기 때문에 종종 시스템과의 연결을 끊고 화면 세션을 분리합니다.
그러나 최근에 나는 결코 전에 경험하지 못한 행동을 발견했습니다. 여러 번 기계를 돌려서 부하가 0 인 유휴 상태인지 확인했습니다. ps ux
또는 top
을 통해 활성 프로세스 목록을 얻으면 여전히 프로세스 목록에서 스크립트 (및 하위 프로세스)를 찾을 수 있습니다. 그런 다음 화면 세션을 다시 연결하여 프로그램 상태를 확인하고 즉시 새 프로세스 배치를 대기열로 보내고 시스템로드가 몇 초 만에 12로 돌아갑니다. 스크린 세션을 다시 연결하는 것 이외에는 스크립트에 아무 것도하지 않았습니다.
시스템에 모니터링 도구를 설치했는데 특정 시간이 지나면 일부 프로세스가 끝나고 새로운 프로세스가 시작되지 않습니다. 따라서 시스템은 하위 프로세스가 사용 중이며 대기열에서 더 이상 작업이 해제되지 않는 즉시 대기 상태가 될 때까지 활성화됩니다.
그럼 내 질문은, 누구든지이 동작을 설명하는 이유를 알고 있습니까?
EDIT : 1 년 정도 지나면이 문제는 더 이상 재현 할 수 없으며 화면에 일부 패치 나 파이썬 자체가 없습니다. 나는 그것이 시험을위한 좋은 지침을 제공 할 때 대답을 받아들입니다.
문제점이 발생했을 때 사용하고있는 파이썬 및 화면의 버전을 알 수 있습니까? 그리고 이제는 문제가 더 이상 발생하지 않는 버전을 알려주십시오. 나는 나 자신과 매우 비슷한 문제를 겪고있다. – SpoonMeiser
죄송합니다 SpoonMeiser, 문제가 너무 오래 전 그 정보가 더 이상 없었어요. 그때부터 나는 화면 대신 tmux를 사용하기 시작했다. 해결 방법은 stdout/stderr에 인쇄하는 대신 파일 로깅을 사용했습니다. – Unode