altera o ambiente de um processo em execução

17

Como é possível alterar alguma variável no env de um processo já em execução, por exemplo, por meio de /proc/PID/environ? Esse "arquivo" é read-only .

É necessário alterar ou remover a variável DISPLAY de um trabalho em lote de longa execução sem eliminá-lo.

    
por Marcos 09.05.2012 / 11:02

1 resposta

17

Você não pode fazer isso sem hacks desagradáveis - não há API para isso, não há como notificar o processo que seu ambiente mudou (já que isso não é realmente possível de qualquer maneira). Mesmo se você conseguir fazer isso, não há como ter certeza de que terá algum efeito - o processo poderia muito bem ter armazenado em cache a variável de ambiente que você está tentando cutucar (já que nada deveria ser capaz de alterá-lo). ).

Se você realmente quiser fazer isso e estiver preparado para pegar as peças se as coisas derem errado, você pode usar um depurador. Veja, por exemplo, esta questão do Stack Overflow:
Is Existe uma maneira de alterar as variáveis de ambiente de outro processo?

Essencialmente:

(gdb) attach process_id
(gdb) call putenv ("DISPLAY=your.new:value")
(gdb) detach

Outras funções possíveis que você pode tentar chamar são setenv ou unsetenv .

Por favor, lembre-se de que isto pode não funcionar, ou ter conseqüências terríveis se o processo que você direciona faz coisas "interessantes" com seu bloco de ambiente. Teste em processos não críticos primeiro, mas certifique-se de que esses processos de teste espelham o mais próximo possível daquele que você está tentando cutucar.

    
por 09.05.2012 / 12:30