¿Cómo sería posible alterar alguna variable en el env
? de un proceso que ya se está ejecutando, por ejemplo a través de /proc/PID/environ?
Ese "archivo" es read-only
.
Necesita cambiar o desactivar la variable DISPLAY de un trabajo por lotes de ejecución prolongada sin eliminarlo.
Respuesta aceptada:
No puede hacer esto sin un truco desagradable:no hay API para esto, no hay forma de notificar al proceso que su entorno ha cambiado (ya que eso no es realmente posible de todos modos).
Incluso si logra hacerlo, no hay forma de estar seguro de que tendrá algún efecto:el proceso podría muy bien haber almacenado en caché la variable de entorno que está tratando de introducir (ya que se supone que nada puede cambiarla).
Si realmente quiere hacer esto y está preparado para recoger las piezas si las cosas salen mal, puede usar un depurador. Consulte, por ejemplo, esta pregunta de desbordamiento de pila:
¿Hay alguna forma de cambiar las variables de entorno de otro proceso?
Esencialmente:
(gdb) attach process_id
(gdb) call putenv ("DISPLAY=your.new:value")
(gdb) detach
Otras posibles funciones que podría intentar llamar son setenv
o unsetenv
.
Tenga en cuenta que es posible que esto no funcione o que tenga consecuencias nefastas si el proceso al que se dirige hace cosas "interesantes" con su bloque de entorno. Pruébelo primero en procesos no críticos, pero asegúrese de que estos procesos de prueba reflejen lo más cerca posible del que está tratando de pokear.