Como um aplicativo gráfico é iniciado a partir de uma sessão bash conectada a essa sessão bash?

6

Quando inicio um aplicativo gráfico a partir de um terminal que executa o bash, esse aplicativo é de alguma forma conectado a essa sessão bash. Por exemplo, quando os aplicativos despejam algum texto, ele aparece na sessão bash de onde é iniciado. Além disso, alguns aplicativos serão fechados quando eu fechar o terminal usando o botão fechar, mas não quando eu fechar o terminal, saindo da sessão bash usando o comando exit ou CTRL + D.

Como um aplicativo gráfico é iniciado a partir de uma sessão bash conectada a essa sessão bash?

pergunta de bônus: Como posso inspecionar esta conexão? provavelmente também manipula?

    
por lesmana 11.11.2010 / 15:26

2 respostas

8

O aplicativo é conectado de duas maneiras: para bash e para o terminal.

A conexão com o terminal é que os fluxos padrão (stdin, stdout e stderr) do aplicativo estão conectados ao terminal. Aplicações GUI típicas não usam stdin ou stdout, mas podem emitir mensagens de erro para o stderr.

A conexão com o shell é que, se você iniciou o aplicativo com foo & , ele permanece conhecido no shell como um trabalho, conforme explicado em Diferença entre nohup, disown e & . Quando você fecha o terminal, o shell recebe um SIGHUP , que é propagado para seus jobs. Quando você digita exit no shell, ele desativa as tarefas de antemão (isso é configurável até certo ponto).

Você pode cortar a conexão do shell com o disown interno. Você não pode cortar a conexão do terminal, pelo menos não sem os métodos fraudulentos (usando um depurador) que podem travar o programa.

    
por 11.11.2010 / 16:34
2

Seu shell inicia esses programas como processos-filhos. Se você executar o pstree, poderá ver essas relações. Eu não sei se / como você pode manipulá-lo.

    
por 11.11.2010 / 15:44