Переменные среды при запуске unshare

Вы можете отменить выключение с помощью shutdown -cили просто нажав Ctrl + C

Это похоже на повторение этого вопроса. Можно ли остановить команду выключения?

2
01.04.2020, 09:57
2 ответа

Вам не нужно пространство имен для изоляции переменных среды. Они уже изолированы и закрыты для каждого процесса. Изменение переменной среды в дочернем процессе НЕ распространяется на его родительский процесс.

Переменные среды в Unix — это просто набор строк, хранящихся в адресном пространстве процесса. Когда процесс разветвляется, его потомки «наследуют» их копию вместе со всем адресным пространством, а когда программа выполняет другую (и заменяет все содержимое адресного пространства ), их приходится передавать явно в качестве аргумента envpдля системного вызова execve(2), если они должны быть сохранены.

Если вы хотите запустить процесс с пустой средой, вы можете запустить его как

env - cmd...

, который просто вызовет execve("/path/to/cmd", ["cmd",..., NULL], [NULL]).

Или запускать его в окружении, содержащем толькоFOO=bar:

env - FOO=bar cmd...

Как пространство имен, влияющее на системные вызовы (clone(2), unshare(2), setns(2)), так и утилиты командной строки, такие как unshare(1), не учитывают среду и не влияют на нее каким-либо особым образом.


Примечание. :Именно так это работает в Unix, а не по какому-то закону природы. В других системах, таких как plan9 (, где возникла концепция пространства имен, но где все пространства имен в основном являются mount пространствами имен, поскольку все, что есть, является файлом/системой ), среда является просто файловая система, смонтированная по умолчанию на /envи, в отличие от Unix,совместно используемая по умолчанию между родителем и дочерним элементом.

4
19.03.2021, 02:30

Переменные среды в bashотносятся только к конкретному экземпляру оболочки, поэтому нет необходимости определять для них отдельные пространства имен.

Вы можете ясно увидеть это, если откроете два окна терминала одновременно (в среде рабочего стола ). Создайте новую переменную среды в одном из них, например.:

TEST_VAR=34

Он не будет отображаться в сеансе bashв другом окне терминала.

1
19.03.2021, 02:30

Теги

Похожие вопросы