进程ID的最大值是多少?


Answers:


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
一个PID的32位机的最大值为32767,不32768 0是调度器和1被初始化,然后用户进程获得2至32767

2
user129258是正确的,并且与手册页和内核文档一致。根据问题的要求,PID最大允许值该伪文件中的值小一。
JdeBP '16

1
@ user129258,仅在使用init时才会保留。总是有可能直接引导到shell,比如说busybox并从那里手动执行操作而无需作业控制。甚至有一些启动脚本,然后退回到shell。无论如何,在这种情况下,外壳将为PID 1。
蒂姆

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_minprocess_id_max规定了允许的进程ID的范围。
  • 在AIX上,进程ID包含多个字段,包括“进程插槽”和“世代计数”字段。可能的最大值是0x03FFFFFE,因为这些字段仅占据整数的低26位,并且#0除进程#1之外始终为零。
  • 在OpenBSD上,最大值为32766。
  • 在NetBSD上,最大值为30000。

像OpenBSD 6.5,最大,而不是32766根据介绍(2)现在是99999
Kaiepi

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.