Proces dziedziczy środowisko po procesie nadrzędnym, który go uruchamia. Aby zmienić PATH lub inne wartości środowiska w obiekcie potomnym, możemy ustawić zmienną na wartość w obiekcie nadrzędnym i wyeksportować zmienną, jeśli jesteśmy w powłoce, a następnie uruchomić proces potomny. Dziecko może również odczytać jeden lub więcej plików inicjujących, aby zmienić swoje środowisko podczas uruchamiania.
Tak więc są jeszcze dwa pytania, aby uzyskać odpowiedź:
Co to jest drzewo dziedziczenia nadrzędny / podrzędny, które prowadzi do procesu, na który PATH lub zmiana środowiska ma mieć wpływ?
Jakie pliki inicjujące są używane / odczytywane / pozyskiwane przez odpowiednie procesy w tym drzewie?
Oto część wyniku ps (1), aby pokazać, co rozumiem przez drzewo dziedziczenia:
# /bin/ps -o 'uid:5,pid:5,ppid:5,user:4,args' axf
UID PID PPID USER COMMAND
0 1 0 root /usr/lib/systemd/systemd
0 1481 1 root /usr/sbin/gdm-binary -nodaemon
0 1497 1481 root \_ /usr/libexec/gdm-simple-slave ...
0 1504 1497 root \_ /usr/bin/Xorg :0 ...
0 1855 1497 root \_ gdm-session-worker ...
Zwróć uwagę na sekwencje graficzne \ _ i numery PIP / PPID (identyfikator procesu i macierzysty identyfikator PID). PID 1855 został uruchomiony przez (jakieś dziecko z?) 1497, który został uruchomiony przez 1481, który został uruchomiony przez PID 1, który został uruchomiony przez proces przodka 0.
Wykonaj podobne śledzenie dziedziczenia dla procesu, na który chcesz wpłynąć, dowiedz się, które pliki inicjujące są istotne i dokonaj zmiany na PATH gdzieś w tym drzewie, prawdopodobnie z czymś podobnym do:
PATH=${PATH}:/usr/local/bin
~/.pam_environment
rozwiązaniem polega na tym, że moduł pam_env domyślnie go nie czyta, chyba że dystrybucja skonfiguruje go inaczej. Na Fedorze 20 nie jest na przykład czytany.