티스토리 뷰

개발/Linux

pid의 최대값

Jaeyeon Baek 2011.09.16 21:07


pid의 사전적 의미는 프로세스 인식자(Process identifier)로서 프로세스가 실행 될 때에 붙여지는 번호인데요, 그렇다면 이 pid의 최대값은 어떻게 결정될까요? 우선 kernel source를 살펴보면, kernel code 내부에 아래와 같이 pid_max값을 proc으로 남기도록 명시되어 있습니다. 

(linux kernel 2.6.20 version)
                .ctl_name       = KERN_PIDMAX,
                .procname       = "pid_max",
                .data           = &pid_max,
                .maxlen         = sizeof (int),
                .mode           = 0644,
                .proc_handler   = &proc_dointvec_minmax,
                .strategy       = sysctl_intvec,
                .extra1         = &pid_max_min,
                .extra2         = &pid_max_max,

pid_max값의 proc filesystem을 실제로 확인해보면 아래와 같음을 알 수 있습니다.

$ cat /proc/sys/kernel/pid_max 
32768

그렇다면 pid_max 값은 어떻게 정해질까요? 우선 아래와 같이 값이 채워집니다.

int pid_max = PID_MAX_DEFAULT;
여기서 또 PID_MAX_DEFAULT는 아주 간단하게 아래와 같이 define되어 있습니다.
/*
 * This controls the default maximum pid allocated to a process
 */
#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)

자, 여기서 또 따라 올라가봅시다, CONFIG_BASE_SMALL 은 참인가 거짓인가? 이 또한 아주 친절하게 아래와 같이 define 되어 있습니다.

#define CONFIG_BASE_SMALL 0

CONFIG_BASE_SMALL이 0 이므로,  proc filesystem에 명시되어 있는 값과 일치합니다 (0x1000은 10진수로 4096, 0x8000은 10진수로 32768 )

의문이 풀렸습니다, pid의 max값은 kernel source에 명시되어 있는대로 32768 입니다. 자, 그렇다면 pid에 더이상 할당할 공간이 없다면? 어찌될까요? 얼핏 살펴보기로는 pid값으로 NULL을 return 하고 EAGAIN(errno11 "Try again") 를 출력합니다.

뭐 사실.. 32768개의 프로세스를 올리는 일은 흔치 않을테니..



'개발 > Linux' 카테고리의 다른 글

/dev/null 2>&1 의미  (0) 2011.09.21
OOM killer  (0) 2011.09.21
pid의 최대값  (0) 2011.09.16
kernel thread 목록  (0) 2011.09.05
drop_caches (caches flush)  (0) 2011.09.05
회선 대역폭 측정 (iperf)  (0) 2011.08.31
댓글
댓글쓰기 폼