Por que os programas geralmente não são executados quando iniciados pelo 'daemon'?

0

Eu faço daemon -f -i ./some_gui_program - começa.

Eu faço daemon -i ./some_gui_program - nada visível acontece.

Por que não consigo iniciar programas GUI separados no Linux dessa maneira? Qual é o uso da opção -f do daemon se ele muda muito o comportamento?

    
por Vi. 19.03.2014 / 14:13

2 respostas

3

Primeiro, algumas informações básicas sobre diferentes tipos de programas:

Um programa GUI é normalmente usado para processar entrada do usuário. Para fazer isso, é necessário algum tipo de servidor X, que lide com interações com teclado e mouse. Quando você inicia um programa GUI, ele herdará muitas configurações da sua sessão X. Não funcionará a menos que o programa tenha acesso a essas configurações e à sua sessão X.

Existem muitos outros programas que não requerem X ou GUI. Normalmente, esses são executados a partir de uma linha de comando ou executados como um daemon. Programas executados a partir da linha de comando receberão entrada via STDIN e (normalmente) a saída de impressão de volta via STDOUT.

Outros programas não requerem entrada / saída via STDIN / STDOUT. Um exemplo disso é um servidor web - sua entrada será recebida através de uma sessão TCP, e a saída será enviada através de uma conexão TCP e para arquivos de log.

Então, respondendo às suas perguntas:

Why I can't start GUI programs detached on Linux this way?

Quando você executa o daemon, você está essencialmente desconectando o programa da sua própria GUI e da sua entrada / saída. É por isso que um programa que requer uma interface gráfica ou uma conexão com seu STDIN / STDOUT não funciona com o daemon. Somente o último tipo de programa é adequado para ser executado completamente como um daemon.

What's the use of daemon's -f option if it changes behaviour that much?

Mudar o comportamento dessa forma é exatamente para o que o -f é - ele não separa completamente o processo daemonized e, portanto, ele pode ser usado para programas que exigem, e. conexão com sua sessão X atual.

Digitar man daemon em um xterm lhe dará muitas informações sobre como funciona.

    
por 19.03.2014 / 14:35
0

Normalmente, você quer que um programa seja executado em segundo plano quando não espera interagir com ele. Os daemons são um exemplo clássico disso. Normalmente, eles são iniciados durante o processo de inicialização e não esperam nenhuma entrada do usuário (pelo menos não via linha de comando). GUIs, por outro lado, são a própria definição de algo que precisa interagir com o usuário.

Em relação à sua pergunta sobre falha de programas no modo daemon, isso se resume a três coisas:

  • Iniciando o programa de maneira errada, por exemplo não usando o script de início adequado
  • Ambiente, por exemplo variáveis como $HOME não estão configuradas corretamente
  • Práticas de programação incorretas

Sem saber a que programa exato você está se referindo, obviamente não podemos responder a sua pergunta definitivamente. No entanto, em geral, não faria muito sentido executar GUIs em segundo plano, sem qualquer forma de interação.

    
por 19.03.2014 / 14:25