모든 Linux 프로세스는 종료 중/종료가 완료되면 stdout에 EOF를 기록합니까?

모든 Linux 프로세스는 종료 중/종료가 완료되면 stdout에 EOF를 기록합니까?

Python 모듈(Python 스크립트) 을 사용하여 Debian 컨테이너 shutdown -h 0로 보내는 lxc(즉, lxc에서 이 명령을 실행하는) 데 문제가 있습니다 . pexpect이 모듈에서 사용자는 EOF 중에서 특정 하위 문자열을 "기대"(= 프로세스 출력 대기)할 수 있습니다. 이는 출력에서 ​​EOF가 인식되지 않는 이유를 추가로 디버깅할 수 있도록 질문으로 이어집니다. 프로세스가 종료될 때까지 기다리려면 프로세스 종료 후 내가 무엇을 "예상"할 수 있는지 알아야 합니다. pexpect모듈이 해당 프로세스에 대한 비차단 기능을 숨기기 때문에 단순히 프로세스를 기다릴 수는 없습니다 .

그만큼pexpect (참조http://www.bx.psu.edu/~nate/pexpect/pexpect.html#pexpect.spawn.expect자세한 내용은) 읽기 시스템 호출에서 EOF 수신을 (덕) 유형으로 래핑하고 pexpect.expect(프로세스의 가능한 출력/피드백 캡슐화)에서 사용할 수 있도록 합니다.

나는 같은 일부 프로세스가 lsEOF로 종료될 것으로 예상되기 때문에, 즉 pexpectEOF의 의미(예:http://pexpect.sourceforge.net/pexpect.html).

답변1

shutdown -h 0명령을 실행하는 halt대신 대신 실행하거나 호스트에서 이 명령을 실행하는 것이 좋습니다 lxc-shutdown -n <name>.

원천:9.5 컨테이너 모니터링 및 종료

답변2

EOF는 무한한 양의 데이터(예: 스트림)를 제공할 수 있는 리소스에 대해 더 이상의 입력이 예상되지 않음을 나타냅니다. 이러한 상황은 종종 스트림에 단일 문자를 작성하여 표현됩니다(기본 시스템(예: OS 또는 런타임 환경)에 의해 정의됨).

프로세스는 프로세스 간 통신을 위해 스트림을 사용하므로 출력 제한을 표시해야 하며 전송 프로세스는 EOF를 사용하여 입력 제한을 표시해야 합니다. 기본 시스템은 이 입력 및 출력을 자체 프로세스 처리 메커니즘으로 확실히 전달하여 프로그램/시스템에서 평가에 EOF를 사용할 수 있도록 합니다.

pexpect질문의 사용 사례 에 대한 참고 사항 : 컨테이너 shutil.pexpect의 파일을 복사하는 데 적합하지 않은 것 같습니다 lxc. 문제가 발생하고 출력의 시간 오프셋으로 pexpect인해 혼란이 발생합니다.

관련 정보