GNU/Linux >> Linux Esercitazione >  >> Linux

Cambiare l'ambiente di un processo in esecuzione?

Come potrebbe essere possibile modificare alcune variabili in env di un processo già in esecuzione, ad esempio tramite /proc/PID/environ? Quel "file" è read-only .

È necessario modificare o annullare l'impostazione della variabile DISPLAY di un processo batch di lunga durata senza interromperlo.

Risposta accettata:

Non puoi farlo senza un brutto hack:non c'è API per questo, non c'è modo di notificare al processo che il suo ambiente è cambiato (dal momento che comunque non è davvero possibile).
Anche se riesci a farlo, non c'è modo di essere sicuri che avrà alcun effetto:il processo potrebbe benissimo aver memorizzato nella cache la variabile di ambiente che stai cercando di inserire (poiché nulla dovrebbe essere in grado di cambiarla).

Se vuoi davvero farlo e sei pronto a raccogliere i pezzi se le cose vanno male, puoi usare un debugger. Vedi ad esempio questa domanda sull'overflow dello stack:
C'è un modo per modificare le variabili di ambiente di un altro processo?

Essenzialmente:

(gdb) attach process_id
(gdb) call putenv ("DISPLAY=your.new:value")
(gdb) detach

Altre possibili funzioni che potresti provare a chiamare sono setenv o unsetenv .

Per favore, tieni davvero a mente che questo potrebbe non funzionare o avere conseguenze terribili se il processo a cui ti rivolgi fa cose "interessanti" con il suo blocco ambientale. Provalo prima su processi non critici, ma assicurati che questi processi di test rispecchino il più possibile quello che stai cercando di colpire.


Linux
  1. Garantire che un processo sia sempre in esecuzione?

  2. Ottenere il tempo dell'utente e del kernel di un processo in esecuzione?

  3. Verificare il processo se lo stesso è in esecuzione?

  4. È possibile modificare l'ambiente di un processo genitore in Python?

  5. Cambia il nome del processo in Linux

Come elencare i processi in esecuzione in Linux

Come modificare la priorità di un processo in Linux

Come eliminare l'esecuzione del processo Linux su una porta particolare

Processi in esecuzione

C'è un modo per cambiare le variabili d'ambiente di un altro processo in Unix?

Riavvia il processo alla modifica del file in Linux