Jak może być możliwa zmiana jakiejś zmiennej w env
już uruchomionym procesie, na przykład poprzez /proc/PID/environ?
„Plik” read-only
.
Konieczna jest zmiana lub rozbrojenie zmiennej DISPLAY długotrwałego zadania wsadowego bez jej zabijania.
environment-variables
proc
Marcos
źródło
źródło
xpra
może być interesujące.xpra
brzmi użytecznie. Zwykle przekierowuję na ekrany inne niż hostowane przezXvfb
lubXephyr
, ale dziś zapomniałem i uruchomiłem z cli zamiast cron / at, aby rozwiązać problemy z wyjściem, więc denerwowało mnie to:0
Odpowiedzi:
Nie możesz tego zrobić bez paskudnych włamań - nie ma do tego API, nie ma sposobu, aby powiadomić proces, że zmieniło się jego środowisko (ponieważ tak naprawdę nie jest to możliwe).
Nawet jeśli uda ci się to zrobić, nie ma sposobu, aby upewnić się, że będzie to miało jakikolwiek efekt - proces mógł bardzo dobrze buforować zmienną środowiskową, którą próbujesz zaczepić (ponieważ nic nie powinno być w stanie jej zmienić ).
Jeśli naprawdę chcesz to zrobić i jesteś przygotowany na zbieranie elementów, jeśli coś pójdzie nie tak, możesz użyć debugera. Zobacz na przykład pytanie Przepełnienie stosu:
czy istnieje sposób na zmianę zmiennych środowiskowych innego procesu?
Głównie:
Inne możliwe funkcje, które możesz próbować wywołać, to
setenv
lubunsetenv
.Należy pamiętać, że może to nie działać lub mieć tragiczne konsekwencje, jeśli proces, na który celujesz, „blokuje” elementy środowiska. Najpierw przetestuj to na niekrytycznych procesach, ale upewnij się, że te procesy testowe odzwierciedlają jak najbliżej tego, który próbujesz zaczepić.
źródło
Nie ma takiej potrzeby, jeśli zadanie wsadowe może odczytać z systemu plików w celu pobrania zmiany. Wystarczy uruchomić zadanie ze ścieżką do tymczasowego unikalnego katalogu i przekazać tę samą ścieżkę do skryptu powłoki potomnej. Skrypt zablokuje plik w tym katalogu i zapisze plik z nowymi wartościami w pobliżu pliku blokady. Od czasu do czasu skrypt zadania blokuje ten sam plik, analizuje i odczytuje zmiany z pliku wartości. Aby dowiedzieć się, jak zrobić blokadę w powłoce uniksowej, po prostu wyszukaj
unix shell lock file
lubbash lock file
istnieje już wiele takich rozwiązań.Korzyści z tego rozwiązania:
Problemy we wdrażaniu poniżej:
flock
w systemie Linux w celu uzyskania efektu wykluczenia, w systemie Windows ma wbudowane wykluczenie)Implementacja jest przechowywana tutaj: https://sourceforge.net/p/contools/contools/HEAD/tree/trunk/Scripts/Tools
bash
Realizacja:set_vars_from_locked_file_pair.sh
testlock.sh
To samo w systemie Windows (jako przykład przenośności):
set_vars_from_locked_file_pair.bat
testlock.bat
Aby zapisać pliki, po prostu w ten sam sposób zablokuj kod.
źródło