Wie könnte es möglich sein, eine Variable in env
einem bereits laufenden Prozess zu ändern , zum Beispiel über /proc/PID/environ?
Diese "Datei" read-only
.
Sie müssen die DISPLAY-Variable eines Batch-Jobs mit langer Laufzeit ändern oder deaktivieren, ohne ihn zu beenden.
environment-variables
proc
Marcos
quelle
quelle
xpra
könnte es interessant sein.xpra
klingt nützlich. Normalerweise ich umleiten zu nicht-User - Displays gehostet vonXvfb
oderXephyr
, aber heute habe ich vergessen und lief von cli statt cron / at zu beheben Ausgang, so ist es bei mir lästig gewesen:0
Antworten:
Sie können dies nicht ohne böse Hacks tun - es gibt keine API dafür, keine Möglichkeit, den Prozess zu benachrichtigen, dass sich seine Umgebung geändert hat (da dies sowieso nicht wirklich möglich ist).
Selbst wenn Sie dies schaffen, können Sie nicht sicher sein, ob dies Auswirkungen hat - der Prozess hätte die Umgebungsvariable, die Sie anstoßen möchten, sehr gut zwischengespeichert (da nichts sie ändern kann) ).
Wenn Sie dies wirklich tun möchten und bereit sind, die Teile abzuholen, wenn etwas schief geht, können Sie einen Debugger verwenden. Siehe zum Beispiel diese Stapelüberlauf-Frage:
Gibt es eine Möglichkeit, die Umgebungsvariablen eines anderen Prozesses zu ändern?
Im Wesentlichen:
Andere mögliche Funktionen, die Sie aufrufen möchten, sind
setenv
oderunsetenv
.Bitte denken Sie wirklich daran, dass dies möglicherweise nicht funktioniert oder schwerwiegende Konsequenzen hat, wenn der Prozess, den Sie anvisieren, "interessante" Dinge mit seinem Umgebungsblock tut. Testen Sie es zunächst an unkritischen Prozessen, aber stellen Sie sicher, dass diese Testprozesse dem entsprechen, den Sie anstreben.
quelle
Dies ist nicht erforderlich, wenn ein Stapeljob aus einem Dateisystem lesen kann, um eine Änderung abzurufen. Führen Sie einfach einen Job mit einem Pfad zu einem temporären eindeutigen Verzeichnis aus und übergeben Sie den gleichen Pfad an das untergeordnete Shell-Skript. Das Skript sperrt eine Datei in diesem Verzeichnis und schreibt eine Datei mit neuen Werten in die Nähe der Sperrdatei. Von Zeit zu Zeit sperrt ein Jobskript dieselbe Datei, analysiert und liest Änderungen aus der Wertedatei zurück. Um herauszufinden, wie Sie eine Sperre in der Unix-Shell erstellen können, suchen Sie einfach nach
unix shell lock file
oderbash lock file
, dafür gibt es bereits zahlreiche Lösungen.Vorteile dieser Lösung:
Probleme bei der Implementierung unten:
flock
unter Linux wird ein Ausschlusseffekt erzielt, unter Windows ist ein Ausschluss integriert).Die Implementierung wird hier gespeichert: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools
Die
bash
Umsetzung:set_vars_from_locked_file_pair.sh
testlock.sh
Dasselbe unter Windows (als Beispiel für Portabilität):
set_vars_from_locked_file_pair.bat
testlock.bat
Um die Dateien zu schreiben, sperren Sie auf die gleiche Weise Ihren Code.
quelle