환경변수는 시스템의 속성을 기록하고 있는 변수이다.
일반적으로 프로세스의 환경변수는 프로세스 자신의 정보를 저장하거나 변경하는 용도로 사용된다. 즉, 프로세스 간 통신이 주 목적인 개체는 아니며, 이를 통한 IPC는 부가적인 기능이 된다. 환경변수는 아래 그림처럼 구성된다.
이 환경변수는 보통 Shell에서 정의하고 저장하는,데 Shell에서 프로그램을 실행시키면 프로그램이 시작하는 순간 셸의 환경변수를 모두 복사해서 프로세스이 들고 있게 된다.
따라서 그 이후에 셸의 환경변수를 바꾼다고 해도 이미 시작한 프로그램의 환경변수는 바뀌지 않는다. 이후 새로 시작하는 프로그램의 환경변수가 바뀔 뿐이다.
해당 정보는 pseudo-filesystem인 /proc 안에서 확인할 수 있다.
/proc/<pid>/environ
에서 pid
를 원하는 프로세스의 식별자로 변경하여 cat해보자.
# cat /proc/1475/environ | tr '\0' '\n'
HOME=/
TERM=linux
PATH=/usr/sbin:/usr/bin:/sbin:/bin
한 변수의 값을 다음 변수와 구분하는 null 문자 '\0'를 개행문자로 바꿔주기 위해 tr을 같이 사용했다. 위 명령어에서는 PID 1475에 대해 HOME, TERM 및 PATH 변수가 설정되어 있음을 알 수 있다.
ps로도 PID를 확인할 수 있다.
$ ps eww 1475
PID TTY STAT TIME COMMAND
1475 ... ... ... processname HOME=/ TERM=linux PATH=/usr/sbin:/usr/bin:/sbin:/bin
https://www.baeldung.com/linux/process-environment-variables