GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cambiar el entorno de un proceso en ejecución?

¿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.


Linux
  1. ¿Cómo cambiar la redirección de salida de un proceso en ejecución?

  2. ¿Asegurarse de que un proceso esté siempre en ejecución?

  3. ¿Obtener tiempo de usuario y kernel de un proceso en ejecución?

  4. ¿Comprobar el proceso si se está ejecutando lo mismo?

  5. ¿Cómo reiniciar (o restablecer) un proceso en ejecución en Linux?

Cómo enumerar los procesos en ejecución en Linux

Cómo cambiar la prioridad de un proceso en Linux

Cómo matar el proceso de ejecución de Linux en un puerto particular

Procesos corriendo

¿Determinar en qué grupo(s) se encuentra un proceso en ejecución?

¿Variables de entorno de un proceso en ejecución en Unix?