Posso alterar variáveis de ambiente locais para um processo em execução?

3

Suponha que eu tenha um processo contínuo em execução que leia uma variável de ambiente:

export APPLE=abc123
watch echo \$APPLE

Agora, há alguma maneira de alterar o valor que está sendo lido durante a execução? Eu tentei suspender o processo ( ctrl - z ), exportando um novo valor para a variável e, em seguida, retomando ( fg ), mas o valor antigo ainda é exibido .

Isso é possível? Eu prefiro uma resposta que funcione com ferramentas básicas de linha de comando e não exija software especializado, embora seja necessário privilégios de root.

    
por Coderer 24.10.2012 / 15:24

1 resposta

6

I've tried suspending the process (ctrl-z), exporting a new value for the variable, then resuming (fg), but the old value is still displayed.

Isto não funciona porque as variáveis de ambiente são herdadas quando o processo é iniciado - mas quando você usa Ctrl - z e fg it não reinicia watch ; apenas pausa e descompacta o processo antigo.

A única maneira de mudar o ambiente para um processo em execução, a partir do exterior, é fazer de dentro do processo com uma ferramenta de depuração. Por exemplo:

$ gdb -p $(pidof watch)
(gdb) p setenv("APPLE", "orange")
(gdb) q
Really detach? y
    
por 24.10.2012 / 15:34