GNU/Linux >> Tutoriels Linux >  >> Linux

Changer l'environnement d'un processus en cours ?

Comment pourrait-il être possible de modifier une variable dans le env d'un processus déjà en cours d'exécution, par exemple via /proc/PID/environ? Ce "fichier" est en read-only .

Besoin de modifier ou de désactiver la variable DISPLAY d'un travail par lots de longue durée sans le tuer.

Réponse acceptée :

Vous ne pouvez pas faire cela sans un vilain hack - il n'y a pas d'API pour cela, aucun moyen de notifier au processus que son environnement a changé (puisque ce n'est pas vraiment possible de toute façon).
Même si vous y parvenez, 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 pousser (puisque rien n'est censé pouvoir la changer).

Si vous voulez vraiment faire cela et que vous êtes prêt à recoller 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 :

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

Les autres fonctions possibles que vous pourriez essayer d'appeler sont setenv ou unsetenv .

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. Commencez par le tester sur des processus non critiques, mais assurez-vous que ces processus de test reflètent le plus fidèlement possible celui que vous essayez de tester.


Linux
  1. Comment redémarrer (ou réinitialiser) un processus en cours d'exécution sous Linux ?

  2. Existe-t-il un moyen de modifier les variables d'environnement d'un autre processus sous Unix ?

  3. Est-il possible de changer l'environnement d'un processus parent en Python ?

  4. Changer le nom du processus sous Linux

  5. Redémarrer le processus lors du changement de fichier sous Linux

Comment répertorier les processus en cours d'exécution sous Linux

Comment changer la priorité d'un processus sous Linux

Comment tuer le processus Linux en cours d'exécution sur un port particulier

Processus en cours d'exécution

Déterminez dans quel(s) groupe(s) se trouve un processus en cours d'exécution ?

Variables d'environnement d'un processus en cours d'exécution sous Unix ?