프로세스 식별자
컴퓨터 과학에서 프로세스 식별자(프로세스 ID 또는 PID)는 유닉스, 맥 OS X 또는 마이크로소프트 윈도우 등의 운영 체제 커널이 사용되는 번호이다. PID를 통해 어떤 한 프로세스를 일시적으로 식별 할 수 있다. PID는 프로세스의 우선순위를 조정하거나 종료하는 등의 다양한 함수 호출에 사용된다.
유닉스 계열 운영 체제
[편집]유닉스 계열 운영 체제에서 새로운 프로세스는 fork() 시스템 호출을 통해 만들어진다. 이때 부모 프로세스가 추후에 자식 프로세스들을 가리킬 수 있도록 새로 만들어진 자식 프로세스의 PID를 반환한다. 이렇게 반환된 PID를 통해 부모 프로세스는 자식 프로세스를 기다리거나 (waitpid()
함수) 종료시킬 수 있다(kill()
함수).
미리 정해진 특정 PID를 가진 작업 두 가지가 있는데 하나는 sched라고도 불리는 swapper다. 항상 PID 0번이 할당되고, 사용자 모드가 아닌 커널의 일부로 페이징을 담당한다. PID 1은 주로 시스템을 시작하고 종료하는데 사용되는 init 프로세스(init process)다. 사실 init 프로세스가 PID 1번을 가지게 된건 어떤 기술적인 이유가 있다기 보단 단순히 커널이 첫 번째로 만든 프로세스기 때문이었다. 하지만 최신 유닉스 시스템들이 프로세스 형태의 커널 구성요소들을 포함함에 따라, 이전 시스템들과의 호환성 유지를 위해 PID 1을 init 프로세스를 위해 별도로 할당하기 시작했다.
PID는 일반적으로 0부터 시작해서 최댓값에 이를 때까지 순차적으로 증가한다. 숫자의 최댓값은 시스템마다 다를 수 있다. 그러다 최댓값에 도달하면 다시 300에서부터 시작한다. 단, 맥 OS X 및 HP-UX의 경우 100에서부터 다시 시작한다. 이 때 아직 할당된 상태의 PID는 건너뜀으로서 하나의 PID가 동시에 두 개의 프로세스에서 사용되는 것을 방지한다. 이렇게 PID가 재사용되는 점을 악용해 시스템에 대한 정보를 추출하거나 비밀리에 다른 프로세스에 메시지를 보낼 수 있어 어떤 사람들은 이를 보안취약점으로 보기도 한다. 따라서 보안이 우려되는 경우에는 다른 방법으로 PID를 할당 하기도 한다.[1] MPE/iX 등의 일부 시스템의 경우, 커널의 프로세스 정보 페이지를 최소화하기 위해 사용할 수 있는 PID 중 가장 작은 PID가 사용된다.
현재 프로세스의 PID는 getpid()
시스템 호출 또는 셸 변수 $$
로 알 수 있다. 부모 프로세스의 PID는 getppid()
시스템 호출로 얻을 수 있다.
리눅스에서 PID 최댓값은 가상 파일 /proc/sys/kernel/pid_max
로 주어진다.[2]
마이크로소프트 윈도우
[편집]마이크로소프트 윈도우 운영 체제에서는 GetCurrentProcessId()
API를 통해[3] 현재 PID를 알 수 있고 GetProcessId()
API를 통해 타 PID를 알 수 있다.[4] 내부적으로 PID는 client ID라고 불리며 스레드 ID와 같은 네임스페이스에 할당되므로 이 둘이 겹치는 일은은 없다. System Idle Process는 PID 0번이 부여되고, 시스템 프로세스는 PID 4번이 부여된다.
PID 파일 (pidfile)
[편집]오랜 시간 실행되는 일부 프로세스(예: MySQL 데몬)들은 다른 프로세스들이 알 수 있도록 PID를 파일에 기록한다.
같이 보기
[편집]각주
[편집]- ↑ 《comp.unix.aix Frequently Asked Questions》, 2008년 7월 21일에 확인함
- ↑ “proc - process information pseudo-filesystem”, 《Linux Programmer's Manual》, 2009년 12월 28일에 확인함
- ↑ 《GetCurrentProcessId Function》, Windows Developer Center, 2009년 5월 20일에 확인함
- ↑ 《ProcessId Function》, Windows Developer Center, 2011년 3월 5일에 확인함