반응형

 

Linux pid의 최대값

 

 

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개의 프로세스를 올리는 일은 흔치 않을테니..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

http://jybaek.tistory.com/112

반응형
Posted by 공간사랑
,