티스토리 뷰
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 |
kernel thread 목록 (0) | 2011.09.05 |
drop_caches (caches flush) (0) | 2011.09.05 |
회선 대역폭 측정 (iperf) (0) | 2011.08.31 |
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
- Total
- Today
- Yesterday