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.