La respuesta simple es: no se puede hacer esto en general.
¿Por qué no puede haber una solución general?
El "¿por qué?" necesita una explicación más detallada. En Linux, el entorno es específico del proceso. Cada entorno de proceso se almacena en un área de memoria especial asignada exclusivamente para este proceso.
Como acotación al margen: Para inspeccionar rápidamente el entorno de un proceso, echar un vistazo a /proc/<pid>/env
(o tratar /proc/self/env
para el medio ambiente del proceso en ejecución, tales como shell).
Cuando un proceso ("padre") se inicia otro proceso ("niño") (a través fork(2)
), el medio ambiente el medio ambiente de los padres es copiado para producir el entorno del niño. No existe una asociación de estilo de herencia entre esos dos entornos a partir de entonces, están completamente separados. Entonces no hay un ambiente "global" o "maestro" que podamos cambiar, para lograr lo que quieres.
¿Por qué no simplemente cambiar el entorno por proceso de todos los procesos en ejecución? El área de memoria para el entorno se encuentra en una ubicación bien definida (básicamente justo antes de la memoria asignada para la pila), por lo que no puede extenderla fácilmente, sin dañar otras áreas críticas de la memoria del proceso.
posibles medias soluciones para casos especiales
Dicho esto, uno puede imaginar varios casos especiales donde se puede de hecho lograr lo que quiere.
Obviamente, si realiza cambios de "tamaño neutral", podría concebir reparar todos los entornos de todos los procesos. Por ejemplo, reemplace cada variable de entorno USER=foo
(si está presente), con USER=bar
. Un caso bastante especial, me temo.
Si realmente no necesita cambiar los entornos de todos los procesos, sino solo de una clase de conocidos, es posible que haya más enfoques creativos. Vorsprung's answer es una demostración impresionante de hacer exactamente esto con solo procesos de Bash.
Probablemente haya muchos otros casos especiales en los que existe una posible solución. Pero como se explicó anteriormente: no hay solución para el caso general.
X reinicio es suficiente, ¿por qué quiere hacer un reinicio del sistema? – fge
Bueno, no quiero hacer un reinicio del sistema. Ese es todo el punto. –
Esto significa que no puede hacer lo que pide, entonces: _por lo menos_ tendrá que reiniciar X. No puede cambiar el entorno de un proceso en ejecución. – fge