¿Cómo podría ser posible alterar alguna variable en env
un proceso que ya se está ejecutando, por ejemplo a través de /proc/PID/environ?
ese "archivo" read-only
?
Necesita cambiar o desarmar la variable DISPLAY de un trabajo por lotes de larga ejecución sin eliminarlo.
environment-variables
proc
Marcos
fuente
fuente
xpra
podría ser interesante.xpra
Suena útil Normalmente, me redirijo a pantallas que no son de usuario alojadas porXvfb
oXephyr
, pero hoy olvidé y ejecuté desde cli en lugar de cron / at para solucionar problemas de salida, por lo que me ha molestado:0
Respuestas:
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 de todos modos eso no es posible).
Incluso si logras hacer eso, no hay forma de estar seguro de que tendrá algún efecto: el proceso podría haber almacenado en caché la variable de entorno que estás tratando de meter (ya que se supone que nada puede cambiarlo) )
Si realmente desea 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:
Otras funciones posibles que podría intentar llamar son
setenv
ounsetenv
.Por favor, tenga en cuenta que esto puede no funcionar o tener consecuencias nefastas si el proceso al que se dirige hace cosas "interesantes" con su bloqueo del entorno. Primero pruébelo en procesos no críticos, pero asegúrese de que estos procesos de prueba reflejen lo más cerca posible del que está intentando meter.
fuente
No es necesario hacerlo si un trabajo por lotes puede leer desde un sistema de archivos para recuperar un cambio. Simplemente ejecute un trabajo con ruta a un directorio único temporal y pase la misma ruta al script de shell hijo. El script bloqueará un archivo en ese directorio y escribirá un archivo con nuevos valores cerca del archivo de bloqueo. Un script de trabajo de vez en cuando bloqueará el mismo archivo, analizará y leerá los cambios del archivo de valores. Para descubrir cómo hacer un bloqueo en el shell de Unix solo busque
unix shell lock file
obash lock file
, ya existen muchas soluciones para eso.Beneficios de esta solución:
Problemas en la implementación a continuación:
flock
en Linux para lograr el efecto de exclusión, en Windows tiene una exclusión incorporada)La implementación se almacena aquí: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools
La
bash
implementación:set_vars_from_locked_file_pair.sh
testlock.sh
Lo mismo en Windows (como ejemplo de portabilidad):
set_vars_from_locked_file_pair.bat
testlock.bat
Para escribir los archivos de la misma manera, bloquee su código.
fuente