Todos os processos do Linux gravam EOF para stdout quando estão terminando / terminaram de ser terminados?

1

Estou tendo problemas para enviar shutdown -h 0 para um contêiner lxc Debian (ou seja, executar este comando no lxc) com o módulo python pexpect (em um script python). Neste módulo o usuário pode "esperar" (= esperar pela saída do processo) uma certa substring, entre outros EOF, o que me leva à questão para poder depurar ainda mais por que o EOF não é reconhecido na saída. Eu preciso saber o que posso "esperar" após o término do processo, a fim de esperar o processo terminar. Eu não posso simplesmente esperar pelo processo porque o módulo pexpect oculta funções não-bloqueantes para isso.

O módulo pexpect (consulte o link para obter detalhes ) envolve a recepção de EOF na chamada do sistema de leitura em um tipo (pato) e torna-o utilizável em pexpect.expect (um encapsulamento de possível saída / feedback de um processo).

Eu tenho pensado que, porque alguns processos como ls são esperados para terminar com EOF, ou seja, o pexpect sentido de EOF (exemplo em link ).

    
por Karl Richter 27.06.2014 / 15:16

2 respostas

1

EOF indica que nenhuma entrada adicional é esperada em um recurso que possivelmente forneça uma quantidade infinita de dados (por exemplo, um fluxo). Essa situação é frequentemente expressa escrevendo-se um único caractere no fluxo (a ser definido pelo sistema subjacente (provavelmente um sistema operacional ou ambiente de tempo de execução)).

Como os processos usam fluxos para comunicação entre processos, eles precisam indicar os limites de sua saída e os processos de envio precisam injetar os limites de suas entradas usando EOF. O sistema subjacente certamente encaminhará esse input e output para seus próprios mecanismos de manejo de processos, tornando o EOF disponível para avaliação no programa / no sistema.

Observação sobre o caso de uso pexpect na pergunta: shutil.pexpect parece não ser adequado para copiar arquivos de um contêiner lxc . Ele ficou preso e o deslocamento de tempo da saída pexpect causa confusão.

    
por 30.06.2014 / 17:47
1

Em vez de executar este comando shutdown -h 0 , sugiro executar halt ou executar esse comando do host, lxc-shutdown -n <name> .

Fonte: 9.5 Monitoramento e fechamento de contêineres

    
por 28.06.2014 / 01:21