É shell pai de todos os processos no linux

3

Eu tenho tentado entender os escopos de shell e o ambiente em profundidade. Eu tenho lido sobre como se nós fazemos export VARIABLE=VALUE estará disponível em subshell. Então eu queria fazer uma pergunta que eu tinha em mente.

Se bem entendi, se executarmos um programa binário por um arquivo de script, ele poderá ver variáveis de ambiente porque variáveis de ambiente que são definidas através de terminal no linux (digamos, debian) são visíveis para todos os programas executados por um arquivo de script.

Então, minha pergunta e confusão é se existe um shell que seja o pai de todos. Eu estou meio confuso sobre a hierarquia. Quando eu abro o terminal no debian e digito export VARIABLE=VALUE , isso será visível para todos os arquivos de script, mesmo se eu os executar clicando duas vezes na área de trabalho?

Espero que minha pergunta não seja vaga e adequada para o serverfault.

    
por Ozum Safa 11.03.2015 / 15:40

2 respostas

1

Todos os processos - sejam eles shell ou outros - formam uma hierarquia. As variáveis de ambiente são transmitidas do processo pai para filho, a menos que o pai tome uma ação explícita para gerenciar o ambiente da criança. Na maioria dos sistemas init é o processo na raiz da árvore de processos, mas a situação pode ser diferente, por exemplo, em ambientes incorporados. A execução de pstree -a mostra todos os processos em uma árvore.

Variáveis de ambiente definidas por processos filhos não são propagadas para pais ou irmãos, de modo que exportar uma variável em uma janela de terminal só afetará os processos iniciados a partir dessa janela. Assim, a resposta à sua pergunta é não.

    
por 11.03.2015 / 15:50
0

Em tantas palavras; Não, um shell que você executa como filho da sua sessão do X11 não tem como alterar o ambiente da sessão do X11, que será o pai (ou possivelmente o avô) dos processos que você iniciar clicando duas vezes na área de trabalho. / p>

Uma solução comum é escrever a ferramenta de duplo clique de forma a se conectar a algum tipo de mecanismo de configuração e buscar as configurações necessárias. Isso pode ser apenas um arquivo de configuração em seu diretório pessoal ou algum tipo de daemon de configurações. Ambientes de desktop X11 modernos estão executando essas coisas fora da caixa; talvez comece olhando para dbus .

Naturalmente, isso ajuda apenas as ferramentas projetadas para serem executadas exclusivamente em um ambiente em que essas instalações estejam disponíveis. No caso geral, talvez você queira que seu programa Java leia um arquivo de configuração de todo o sistema, algo como /etc/eat_memory_and_crash.conf (supondo que seu programa Java seja chamado eat_memory_and_crash ; no ecossistema Java, suponho que isso seria um XML arquivo).

    
por 12.03.2015 / 14:15