Variables de entorno al ejecutar dejar de compartir

Variables de entorno al ejecutar dejar de compartir

¿Existe algún espacio de nombres (proceso, usuario, etc.) que aísle las variables de entorno?

En caso de que lo haya, ¿qué pasa cuando unshare? ¿Se clonan? ¿Qué sucede si un proceso cambia una variable existente?

EDITAR: estoy usando Ubuntu

Respuesta1

No necesita ningún espacio de nombres para aislar las variables de entorno. Ya están aislados y son privados de cada proceso. La modificación de una variable de entorno en un proceso hijo NO se propagará a su proceso padre.

Las variables de entorno en Unix son solo un conjunto de cadenas almacenadas en el espacio de direcciones de un proceso. Cuando un proceso se bifurca, sus hijos "heredarán" una copia de ellos junto con todo el espacio de direcciones, y cuando un programa ejecuta otro (y reemplaza todo el contenido del espacio de direcciones), deben pasarse explícitamente como argumento envpa la execve(2)llamada al sistema si se van a conservar.

Si desea iniciar un proceso con unvacíoentorno, puede iniciarlo como

env - cmd ...

que simplemente llamará execve("/path/to/cmd", ["cmd", ..., NULL], [NULL]).

O ejecutarlo con un entorno que contenga solo FOO=bar:

env - FOO=bar cmd ...

Tanto el espacio de nombres que afecta las llamadas al sistema ( ,, clone(2)) como las utilidades de línea de comandos no consideran ni afectan el entorno de ninguna manera especial.unshare(2)setns(2)unshare(1)


Nota: Así es como funciona en Unix, no como una ley de la naturaleza. En otros sistemas como plan9 (donde se originó el concepto de espacio de nombres, pero donde todos los espacios de nombres son básicamentemontarespacios de nombres, ya que todo lo que hay es un archivo/sistema) elambientees sólo un sistema de archivos montado de forma predeterminada /envy, a diferencia de Unix,compartidopor defectoentre el padre y el niño.

Respuesta2

Las variables de entorno en bashsolo tienen como ámbito una instancia particular del shell, por lo que no es necesario definir espacios de nombres separados para ellas.

Puede ver esto claramente si abre dos ventanas de terminal a la vez (en un entorno de escritorio). Cree una nueva variable de entorno en uno de ellos, por ejemplo:

TEST_VAR=34

No aparecerá en la bashsesión en la otra ventana de terminal.

información relacionada