환경 변수는 프로세스에 속해야 합니다. 그렇죠? $PATH 및 $HOME과 같은 사실상의 "전역" 환경 변수가 있는 것으로 보입니다. 어떤 프로세스에 속해 있나요?
답변1
단일 PATH 변수가 없으며 단일 프로세스에 속하지 않습니다.
모든 프로세스에는환경, 이는 키-값 쌍 목록으로 구성됩니다. 키는 일반적으로 "변수"로 명명됩니다. 이 export
명령은 환경을 나열합니다. 프로세스는 상위 프로세스로부터 환경을 상속받습니다(UNIX에서는 상위 프로세스가 종료되기 전에도 가능합니다. 멋지지 않나요?).
예를 들어 어떤 변수든 환경에 넣을 수 있지만 export birthday="Jan 23"
HOME 또는 PATH와 같은 일부 변수는 셸에서 특별한 의미를 갖습니다. 다른 변수는 일부 프로그램에서 특별한 의미를 갖습니다. 예를 들면 다음을 참조하세요.환경 부분명령에 대한 매뉴얼 페이지에서 man
.
요약하면 모든 프로세스에는 PATH와 HOME이 있습니다.
답변2
환경은 일반적으로 다음을 통해 새 프로세스로 전달됩니다.구현하다배열이 보관되어 있는 메모리 영역에 대한 포인터를 사용하십시오 envp
.
int execve(const char *pathname, char *const argv[],
char *const envp[]);
환경은 일반적으로 상속되지만 기본적 /etc/environment
으로 예를 들어 (core $PATH)를 읽어서 구축되기도 합니다. Bourne 쉘은 /etc/profile
로컬 구성 파일 등도 읽습니다.
위의 내용 외에도,POSIX 구현*독서가 도움이 될 수 있습니다.