프로세스 ID의 최대 값은 얼마입니까?


42

프로세스 ID의 최대 값은 얼마입니까?

또한 프로세스 ID를 변경할 수 있습니까?

답변:


61

Linux에서는 다음을 사용하여 시스템의 최대 PID 값을 찾을 수 있습니다.

$ cat /proc/sys/kernel/pid_max

이 값은 동일한 파일을 사용하여 쓸 수도 있지만 32 비트 시스템의 경우 이론적 최대 값 인 32768 또는 64 비트의 경우 4194304까지만 확장 할 수 있습니다.

$ echo 32768 > /proc/sys/kernel/pid_max

대부분의 64 비트 시스템에서는이 값을 32 비트 시스템에서 찾은 것과 동일한 값으로 설정하는 것이 일반적인 관행 인 것처럼 보이지만 이는 요구 사항이 아니라 관례입니다.

보낸 사람 man 5 proc:

/proc/sys/kernel/pid_max  
  This file (new in Linux 2.5) specifies the value at which PIDs wrap around
  (i.e., the value in this file is one greater than the maximum PID). The
  default value for this file, 32768, results in the same range of PIDs as
  on earlier kernels. On 32-bit platfroms, 32768 is the maximum value for
  pid_max. On 64-bit systems, pid_max can be set to any value up to 2^22
  (PID_MAX_LIMIT, approximately 4 million).

아니요, 실행중인 프로세스의 PID를 변경할 수 없습니다. 프로세스가 시작될 때 커널에 의해 순차적 번호로 할당되며 그 시점의 식별자입니다. 새로운 것을 얻기 위해 할 수있는 유일한 일은 코드에 새로운 프로세스를 포크하고 이전 프로세스를 종료하는 것입니다.


우리는와 커널 비트 확신 할 수
물병 전원

2
"PID를 변경할 수 없음"사례에 대한 궁금한 반-카운터 예는 보조 스레드 중 하나가 exec ()를 수행하는 다중 스레드 프로그램의 경우입니다. 전체 프로세스를 오버레이하지만 PID를 실행 스레드의 TID로 변경합니다.
fche

3
32 비트 시스템에 대한 PID의 최대 값은 32768이 아니라 32767입니다. 0은 스케줄러이고 1은 초기화 된 후 사용자 프로세스는

2
user129258은 옳으며 매뉴얼 페이지와 커널 doco와 모두 일치합니다. 질문에 의해 요청 된 PID최대 허용 값은 해당 의사 파일의 값 보다 1이 작습니다 .
JdeBP

1
@ user129258, init를 사용하는 경우에만 유지됩니다. 항상 쉘로 직접 부팅 할 수 있습니다. busybox를 말하고 작업 제어없이 수동으로 작업하십시오. 또는 시작 스크립이 있거나 쉘로 다시 돌아갑니다. 어쨌든 쉘은 그러한 경우 PID 1이됩니다.
Tim

9

다른 답변은 설명했다

  • /proc/sys/kernel/pid_max Linux 및
  • FreeBSD 용 99999

그러나 질문은 운영 체제를 지정하지 않았습니다. 여기 다른 것들이 있습니다 :

  • Solaris에서 프로세스 ID의 최대 값은 커널 튜너 블 매개 변수 ( pidmaxin) /etc/system이며 기본값은 30,000이며 266에서 999,999 사이에서 설정할 수 있습니다. 이 max_nprocs기능은 미묘하게 다른 기능을 가진 커널 조정 가능 매개 변수 가 아닙니다 .
  • HP-UX 10에서 커널 튜너 블은 이름을 지정 process_id_min하고 process_id_max허용 가능한 프로세스 ID의 범위를 규정합니다.
  • AIX에서 프로세스 ID는 "프로세스 슬롯"및 "생성 횟수"필드를 포함하여 여러 필드로 구성됩니다. 필드는 정수의 맨 아래 26 비트 만 차지하고 비트 # 0은 프로세스 # 1을 제외하고 항상 0이므로 가능한 최대 값은 0x03FFFFFE입니다.
  • OpenBSD에서 최대 값은 32766입니다.
  • NetBSD에서 최대 값은 30000입니다.

OpenBSD 6.5에서, 32766이 아닌 intro (2)에 따라 최대 값은 99999입니다.
Kaiepi

4

FreeBSD에서 PID의 값은 intro(2)(link) 에 따라 0에서 99999 사이 입니다. 매뉴얼에서 인용 한 내용은 다음과 같습니다.

프로세스 ID.
시스템의 각 활성 프로세스는 프로세스 ID라는 음이 아닌 정수로 고유하게 식별됩니다. 이 ID의 범위는 0-99999입니다.

소스 코드를 직접 읽으려면 (link)에PID_MAX 정의되어 있습니다.sys/sys/proc.h

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.