Comment pourrait-il être possible de modifier une variable dans env
un processus déjà en cours, par exemple via /proc/PID/environ?
Ce "fichier" read-only
.
Vous devez modifier ou annuler la variable DISPLAY d'un travail par lots de longue durée sans la tuer.
environment-variables
proc
Marcos
la source
la source
xpra
pourrait être intéressant.xpra
semble utile. Normalement, je redirige vers des affichages non-utilisateurs hébergés parXvfb
ouXephyr
, mais aujourd'hui, j'ai oublié et exécuté depuis cli plutôt que cron / at pour dépanner la sortie, donc cela m'a ennuyé à:0
Réponses:
Vous ne pouvez pas faire cela sans un méchant piratage - il n'y a pas d'API pour cela, aucun moyen d'aviser le processus que son environnement a changé (car ce n'est pas vraiment possible de toute façon).
Même si vous parvenez à le faire, il n'y a aucun moyen d'être sûr que cela aura un effet - le processus pourrait très bien avoir mis en cache la variable d'environnement que vous essayez de piquer (car rien n'est censé pouvoir le changer ).
Si vous voulez vraiment le faire et êtes prêt à ramasser les morceaux si les choses tournent mal, vous pouvez utiliser un débogueur. Voir par exemple cette question Stack Overflow:
existe-t-il un moyen de modifier les variables d'environnement d'un autre processus?
Essentiellement:
Les autres fonctions possibles que vous pourriez essayer d'appeler sont
setenv
ouunsetenv
.Veuillez garder à l'esprit que cela peut ne pas fonctionner ou avoir des conséquences désastreuses si le processus que vous ciblez fait des choses "intéressantes" avec son bloc d'environnement. Testez-le d'abord sur des processus non critiques, mais assurez-vous que ces processus de test reflètent aussi étroitement que possible celui que vous essayez de pousser.
la source
Il n'est pas nécessaire de le faire si un travail par lots peut lire à partir d'un système de fichiers pour récupérer une modification. Exécutez simplement un travail avec le chemin vers un répertoire unique temporaire et passez le même chemin au script shell enfant. Le script verrouille un fichier dans ce répertoire et écrit un fichier avec de nouvelles valeurs près du fichier de verrouillage. Un script de travail verrouille de temps en temps le même fichier, analyse et lit les modifications du fichier de valeurs. Pour savoir comment verrouiller le shell Unix, il suffit de rechercher
unix shell lock file
oubash lock file
, il existe déjà de nombreuses solutions pour cela.Bénéfices de cette solution:
Problèmes de mise en œuvre ci-dessous:
flock
sous Linux pour obtenir un effet d'exclusion, sous Windows a une exclusion intégrée)L'implémentation est stockée ici: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools
La
bash
mise en œuvre:set_vars_from_locked_file_pair.sh
testlock.sh
La même chose sous Windows (comme exemple de portabilité):
set_vars_from_locked_file_pair.bat
testlock.bat
Pour écrire les fichiers, verrouillez de la même manière votre code.
la source