Pergunta

Não tenho certeza se devo usar pty.fork() ou os.fork() Ao desova, processos de fundo externo do meu aplicativo. (Como motores de xadrez)

Quero que os processos gerados morram se o pai for morto, como nos aplicativos de desova em um terminal.

Quais são os altos e baixos entre os dois garfos?

Foi útil?

Solução

O processo infantil criado com os.fork() herda o stdin/stdout/stderr do processo pai, enquanto a criança criou com pty.fork() está conectado ao novo terminal pseudo. Você precisa mais tarde quando escreve um programa como o Xterm: pty.fork() No processo pai, retorna um descritor para controlar o terminal do processo filho, para que você possa representar visualmente os dados e traduzir ações do usuário em sequências de entrada de terminais.

Atualizar:

De Pty (7) Man Page:

Um processo que espera estar conectado a um terminal pode abrir a extremidade do escravo de um pseudo-terminal e depois ser conduzido por um programa que abriu a extremidade principal. Qualquer coisa que seja escrita na extremidade mestre é fornecida ao processo na extremidade do escravo, como se fosse a entrada digitada em um terminal. Por exemplo, escrever o caractere de interrupção (geralmente Control-C) no dispositivo mestre faria com que um sinal de interrupção (SIGINT) fosse gerado para o grupo de processos em primeiro plano que está conectado ao escravo. Por outro lado, qualquer coisa que seja escrita para a extremidade escrava do pseudo-terminal pode ser lida pelo processo conectado ao fim principal.

Outras dicas

No passado, sempre usei o subprocess módulo para isso. Ele fornece uma boa API para se comunicar com subprocessos.

Você pode usar call(*popenargs, **kwargs) para bloquear a execução deles, e acredito que usar o Popen A classe pode lidar com a execução assíncrona.

Confira o documentos para mais informações.

Tanto quanto usar os.fork vs. pty.fork, ambos são altamente dependentes da plataforma e nenhum deles funcionará (ou pelo menos é testado) com o Windows. o pty O módulo parece ser o mais restrito dos dois lendo os documentos. A principal diferença é o aspecto do terminal pseudo. Portanto, se você não estiver disposto a arquitetar seu código de maneira a poder usar o subprocess módulo, eu provavelmente iria com os.fork ao invés de pty.fork.

Os pseudotérmicos são necessários para alguns aplicativos que realmente esperam um terminal. Uma concha interativa é um desses exemplos, mas existem muitos outros. A opção Pty.fork não existe como outro OS.Fork, mas como uma API específica para usar um pseudoterminal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top