Jak by mohlo být možné změnit nějakou proměnnou v env
již běžícího procesu, například prostřednictvím /proc/PID/environ?
Tento „soubor“ je read-only
.
Potřebujete změnit nebo zrušit nastavení proměnné DISPLAY u dlouho běžící dávkové úlohy, aniž byste ji zabili.
Přijatá odpověď:
Nemůžete to udělat bez ošklivých hacků – neexistuje pro to žádné API, žádný způsob, jak oznámit procesu, že se jeho prostředí změnilo (protože to stejně není ve skutečnosti možné).
I když se vám to podaří, neexistuje způsob, jak si být jisti, že to bude mít nějaký účinek – proces mohl velmi dobře uložit do mezipaměti proměnnou prostředí, do které se pokoušíte strkat (protože se předpokládá, že ji nic nemůže změnit).
Pokud to opravdu chcete udělat a jste připraveni sebrat kousky, pokud se něco pokazí, můžete použít debugger. Viz například tato otázka Stack Overflow:
Existuje způsob, jak změnit proměnné prostředí jiného procesu?
V podstatě:
(gdb) attach process_id
(gdb) call putenv ("DISPLAY=your.new:value")
(gdb) detach
Další možné funkce, které byste mohli zkusit volat, jsou setenv
nebo unsetenv
.
Opravdu mějte na paměti, že to nemusí fungovat nebo mít strašné následky, pokud proces, na který cílíte, dělá „zajímavé“ věci se svým blokem prostředí. Nejprve to vyzkoušejte na nekritických procesech, ale ujistěte se, že tyto testovací procesy co možná nejvíce odpovídají tomu, do kterého se snažíte strkat.