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

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

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

또한, 프로세스 ID를 변경할 수 있나요?

답변1

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

$ cat /proc/sys/kernel/pid_max

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

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

대부분의 64비트 시스템에서는 이 값을 32비트 시스템과 동일한 값으로 설정하는 것이 표준으로 보이지만 이는 필수 사항이 아니라 관례에 따른 것입니다.

~에서man 5 proc:

/proc/sys/kernel/pid_max

이 파일(Linux 2.5의 새로운 기능)은 PID 래핑 값을 지정합니다(즉, 이 파일의 값은 최대 PID보다 1 더 큽니다). 이 파일의 기본값인 32768은 이전 커널과 동일한 PID 범위를 생성합니다. 32비트 플랫폼에서는 32768이 최대값입니다 pid_max. 64비트 시스템에서는 최대 2^22( , 약 400만) pid_max의 값으로 설정할 수 있습니다 .PID_MAX_LIMIT

아니요, 실행 중인 프로세스의 PID는 변경할 수 없습니다. 프로세스가 시작되면 커널에 의해 해당 프로세스의 식별자인 시퀀스 번호가 할당됩니다. 새 프로세스를 얻기 위해 할 수 있는 유일한 방법은 코드에서 새 프로세스를 포크하고 이전 프로세스를 종료하는 것입니다.

답변2

다른 답변은 이미 설명했습니다.

  • /proc/sys/kernel/pid_maxLinux 및
  • FreeBSD는 99999입니다.

그러나 질문은 운영 체제를 지정하지 않습니다. 여기에 다른 몇 가지가 있습니다:

  • Solaris에서 프로세스 ID의 최대값은 커널 조정 가능 매개변수입니다.pidmaxin /etc/system— 기본값은 30,000이며 266에서 999,999 사이의 값으로 설정할 수 있습니다. 이는 가 아니라 max_nprocs약간 다른 기능을 갖춘 조정 가능한 커널입니다.
  • HP-UX 10에서 커널 튜너블은 허용되는 프로세스 ID 범위를 지정 process_id_min하고 규제합니다.process_id_max
  • AIX에서 프로세스 ID에는 프로세스 슬롯 및 빌드 수 필드를 포함한 여러 필드가 포함됩니다. 가능한 최대 값은 0x03FFFFFE입니다. 왜냐하면 이러한 필드는 정수의 하위 26비트만 차지하고 프로세스 #1을 제외하면 비트 #0은 항상 0이기 때문입니다.
  • OpenBSD에서 최대값은 32766입니다.
  • NetBSD에서 최대값은 30000입니다.

답변3

리눅스의 경우

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

 $ cat /proc/sys/kernel/pid_max
 4194304
 $ sysctl kernel.pid_max
 kernel.pid_max = 4194304

32비트 시스템에서는 결과가 32768입니다.

달성할 수 있는 최대값을 말하는 경우

커널의 정의에 따르면: https://elixir.bootlin.com/linux/latest/source/include/linux/threads.h#L34

/*
 * This controls the default maximum pid allocated to a process
 */
#define PID_MAX_DEFAULT (CONFIG_BASE_SMALL ? 0x1000 : 0x8000)

/*
 * A maximum of 4 million PIDs should be enough for a while.
 * [NOTE: PID/TIDs are limited to 2^30 ~= 1 billion, see FUTEX_TID_MASK.]
 */
#define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \
    (sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT))

CONFIG_BASE_SMALL을 확인할 수 있습니다.

cat /boot/config-`uname -r`| grep -i config_base_small

내 RHEL 시스템에서는 계산이 2^22 = 4 * 1024 * 1024 ~ 4백만으로 제한됩니다.

테스트를 수행하다

>>> echo 4200000 > /proc/sys/kernel/pid_max; echo $?
bash: echo: write error: Invalid argument
1
>>> echo 4194304 > /proc/sys/kernel/pid_max; echo $?
0
>>> echo 4194305 > /proc/sys/kernel/pid_max; echo $?
bash: echo: write error: Invalid argument
1

또한, 프로세스 ID를 변경할 수 있나요?

현재 프로세스의 PID는 변경할 수 없습니다.
그러나 한도를 변경하려면 아래 단계를 따르세요.

## Using PROC interface.
## Changes Temporarily and immediate. It reverts to the default value after reboot 
echo "VALUE" > /proc/sys/kernel/pid_max

## Using sysctl interface; It is temporary and immediate too.
sysctl -w kernel.pid_max=VALUE

이 값을 유지하려면 /etc/sysctl.conf 또는 /etc/sysctl.d/ 파일에 매개변수를 추가하십시오. 다시 로드하세요:

sysctl -p [File from which the conf needs to be loaded if present]

인용하다:

답변4

FreeBSD에서 PID 값의 범위는 0에서 99999까지입니다.intro(2)(관련된). 매뉴얼의 인용문은 다음과 같습니다.

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

소스 코드를 직접 읽으려면 PID_MAX정의가 다음 위치에 있습니다.sys/sys/proc.h(관련된).

관련 정보