Простой ответ: вы не может сделать это вообще.
Почему не может быть общего решения?
«Почему?» требуется более подробное объяснение. В Linux среда является специфичной для процесса. Каждая среда процесса хранится в специальной области памяти, выделенной исключительно для этого процесса.
Как и в сторону, чтобы быстро осмотреть окружающую среду процесса, взглянуть на /proc/<pid>/env
(или попробовать /proc/self/env
для окружающей среды процесса в настоящее время работает, например, в качестве оболочки).
Когда процесс («родитель») начинает другой процесс («ребенок») (через fork(2)
), окружающая среда среда родитель копируется для получения среды ребенка. После этого между этими двумя средами нет связи типа наследования, они полностью разделены. Таким образом, нет «глобальной» или «основной» среды, которую мы могли бы изменить, чтобы достичь того, чего вы хотите.
Почему бы просто не изменить рабочую среду всех запущенных процессов? Область памяти для среды находится в четко определенном месте (в основном прямо перед памятью, выделенной для стека), поэтому вы не можете легко ее расширить, не повреждая другие критические области памяти процесса.
Возможные сводными решения для особых случаев
Тем не менее, можно представить себе несколько специальных случаев, когда вы могли бы действительно добиться того, что вы хотите.
Наиболее очевидно, что если вы делаете «нейтральные по размеру» изменения, вы можете мыслить заплатку во всех средах всех процессов. Например, замените каждую переменную окружения USER=foo
(если она есть), с USER=bar
. Боюсь, что это довольно частный случай.
Если вам не нужно менять среду для всех процессов, но только из класса известных, возможно, более творческие подходы. Vorsprung's answer - впечатляющая демонстрация того, что вы делаете именно это только с процессами Bash.
Есть, вероятно, много других особых случаев, где есть возможное решение. Но как объяснялось выше: никакого решения для общего случая нет.
X рестарта достаточно, почему вы хотите сделать перезагрузку системы? – fge
Ну, я не хочу перезагружать систему. В этом весь смысл. –
Это означает, что вы не можете делать то, что вы просите, а затем: вам меньше всего нужно перезапустить X. Вы не можете изменить среду уже запущенного процесса. – fge