Como é possível alterar alguma variável no env
processo que já está em execução, por exemplo, através de /proc/PID/environ?
Esse "arquivo" é read-only
.
É necessário alterar ou desabilitar a variável DISPLAY de um trabalho em lotes de longa execução sem matá-lo.
environment-variables
proc
Marcos
fonte
fonte
xpra
pode ser interessante.xpra
parece útil. Normalmente, redireciono para exibições de não usuários hospedadas porXvfb
orXephyr
, mas hoje eu esqueci e executei o cli em vez de cron / at para solucionar problemas de saída, por isso está me incomodando em:0
Respostas:
Você não pode fazer isso sem hacks desagradáveis - não há API para isso, não há maneira de notificar o processo de que seu ambiente foi alterado (já que isso não é realmente possível).
Mesmo que você consiga fazer isso, não há como ter certeza de que isso 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á-la). )
Se você realmente deseja fazer isso e está preparado para juntar as peças, se algo der errado, você pode usar um depurador. Veja, por exemplo, a pergunta Stack Overflow:
Existe uma maneira de alterar as variáveis de ambiente de outro processo?
Essencialmente:
Outras funções possíveis que você pode tentar chamar são
setenv
ouunsetenv
.Por favor, tenha em mente que isso pode não funcionar ou ter conseqüências terríveis se o processo que você direcionar fizer coisas "interessantes" com seu bloqueio de ambiente. Teste-o primeiro em processos não críticos, mas certifique-se de que esses processos sejam o mais próximo possível do que você está tentando cutucar.
fonte
Não é necessário fazer isso se um trabalho em lotes puder ler de um sistema de arquivos para recuperar uma alteração. Basta executar um trabalho com caminho para um diretório exclusivo temporário e passar o mesmo caminho para o script do shell filho. O script bloqueará um arquivo nesse diretório e gravará um arquivo com novos valores próximo ao arquivo de bloqueio. De vez em quando, um script de tarefa bloqueia o mesmo arquivo, analisa e lê as alterações novamente no arquivo de valores. Para descobrir como fazer um bloqueio no shell unix, basta procurar
unix shell lock file
oubash lock file
, já existem muitas soluções para isso.Benefícios desta solução:
Problemas na implementação abaixo:
flock
no Linux, para obter efeito de exclusão, o Windows possui uma exclusão interna)A implementação é armazenada aqui: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools
A
bash
implementação:set_vars_from_locked_file_pair.sh
testlock.sh
O mesmo no Windows (como um exemplo de portabilidade):
set_vars_from_locked_file_pair.bat
testlock.bat
Para escrever os arquivos, faça o mesmo bloqueio do seu código.
fonte