종료/종료 시 모든 Linux 프로세스가 stdout에 EOF를 기록합니까?

종료/종료 시 모든 Linux 프로세스가 stdout에 EOF를 기록합니까?

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

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

ls일부 프로세스가 EOF의 의미 인 EOF로 종료될 것으로 예상되기 때문에 궁금합니다 pexpect(예:http://pexpect.sourceforge.net/pexpect.html).

답변1

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

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

답변2

EOF는 무제한의 데이터를 제공할 수 있는 리소스(예: 스트림)에 추가 입력이 필요하지 않음을 나타냅니다. 이 상황은 일반적으로 스트림(기본 시스템(예: 운영 체제 또는 런타임 환경)에 의해 정의됨)에 단일 문자를 쓰는 것으로 나타납니다.

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

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

관련 정보