GNU/Linux >> Znalost Linux >  >> Linux

Změnit prostředí běžícího procesu?

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.


Linux
  1. Jak změnit přesměrování výstupu běžícího procesu?

  2. Ujistěte se, že proces vždy běží?

  3. Získat čas uživatele a jádra běžícího procesu?

  1. Je možné změnit prostředí nadřazeného procesu v Pythonu?

  2. Změňte název procesu v Linuxu

  3. Restartujte proces při změně souboru v Linuxu

  1. Ukončit proces běžící na portu 80

  2. Určete, ve které skupině (skupinách) je běžící proces?

  3. Proměnné prostředí běžícího procesu na Unixu?