반응형
Linux pid의 최대값
pid의 사전적 의미는 프로세스 인식자(Process identifier)로서 프로세스가 실행 될 때에 붙여지는 번호인데요,
그렇다면 이 pid의 최대값은 어떻게 결정될까요?
우선 kernel source를 살펴보면,
kernel code 내부에 아래와 같이 pid_max값을 proc으로 남기도록 명시되어 있습니다,
(linux kernel 2.6.20 version)
pid_max값의 proc filesystem을 실제로 확인해보면 아래와 같음을 알 수 있습니다,
그렇다면 pid_max 값은 어떻게 정해질까요?
우선 아래와 같이 값이 채워집니다,
자, 여기서 또 따라 올라가봅시다, CONFIG_BASE_SMALL 은 참인가 거짓인가?
이 또한 아주 친절하게 아래와 같이 define 되어 있습니다.
CONFIG_BASE_SMALL이 0 이므로, proc filesystem에 명시되어 있는 값과 일치합니다.
.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,
.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
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)
* 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개의 프로세스를 올리는 일은 흔치 않을테니..
반응형