GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Umgebung eines laufenden Prozesses ändern?

Wie könnte es möglich sein, eine Variable in env zu ändern eines bereits laufenden Prozesses, beispielsweise durch /proc/PID/environ? Diese „Datei“ ist read-only .

Sie müssen die DISPLAY-Variable eines lang andauernden Batch-Jobs ändern oder zurücksetzen, ohne ihn zu beenden.

Akzeptierte Antwort:

Das geht nicht ohne fiese Hacks – dafür gibt es keine API, keine Möglichkeit, den Prozess zu benachrichtigen, dass sich seine Umgebung geändert hat (da das sowieso nicht wirklich möglich ist).
Selbst wenn du das schaffst, Es gibt keine Möglichkeit, sicher zu sein, dass es irgendwelche Auswirkungen haben wird – der Prozess könnte die Umgebungsvariable, die Sie versuchen zu stoßen, zwischengespeichert haben (da nichts in der Lage sein sollte, sie zu ändern).

Wenn Sie dies wirklich tun möchten und bereit sind, die Scherben aufzusammeln, wenn etwas schief geht, können Sie einen Debugger verwenden. Siehe zum Beispiel diese Stack Overflow-Frage:
Gibt es eine Möglichkeit, die Umgebungsvariablen eines anderen Prozesses zu ändern?

Im Wesentlichen:

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

Andere mögliche Funktionen, die Sie aufrufen könnten, sind setenv oder unsetenv .

Bitte denken Sie wirklich daran, dass dies möglicherweise nicht funktioniert oder schwerwiegende Folgen hat, wenn der Prozess, auf den Sie abzielen, mit seinem Umgebungsblock „interessante“ Dinge tut. Testen Sie es zuerst an unkritischen Prozessen, aber stellen Sie sicher, dass diese Testprozesse so nah wie möglich an dem spiegeln, das Sie versuchen zu testen.


Linux
  1. Ändern Sie die Schriftart der Textmodus-Konsole?

  2. Wie ändere ich die Ausgabeumleitung eines laufenden Prozesses?

  3. Auf Prozess prüfen, wenn dieser läuft?

  4. Wie kann man einen laufenden Prozess unter Linux neu starten (oder zurücksetzen)?

  5. Ist es möglich, die Umgebung eines übergeordneten Prozesses in Python zu ändern?

So listen Sie laufende Prozesse in Linux auf

So ändern Sie die Priorität eines Prozesses in Linux

So beenden Sie den laufenden Linux-Prozess auf einem bestimmten Port

Laufende Prozesse

Bestimmen Sie, in welcher Gruppe(n) sich ein laufender Prozess befindet?

Umgebungsvariablen eines laufenden Prozesses unter Unix?