Linux pid的取值范围

简介: 每个进程都有一个进程号(PID),进程号是一个正数,用以唯一标识系统中的某个进程。对各种系统调用而言,进程号有时可以作为传入参数,有时可以作为返回值。

OS 内核版本: Linux 2.6.x


每个进程都有一个进程号(PID),进程号是一个正数,用以唯一标识系统中的某个进程。对

各种系统调用而言,进程号有时可以作为传入参数,有时可以作为返回值。


比如,系统调用 kill()

允许调用者向拥有特定进程号的进程发送一个信号。当需要创建一个对某进程而言唯一的标识符时,进程号就会派上用场。常见的例子是将进程号作为与进程相关文件名的一部分。系统调用 getpid()返回调用进程的进程号。


getpid()返回值的数据类型为 pid_t,该类型是由 SUSv3 所规定的整数类型,专用于存储进

程号。

除了少数系统进程外,比如 init 进程(进程号为 1),程序与运行该程序进程的进程号之

间没有固定关系。

Linux 内核限制进程号需小于等于 32767。新进程创建时,内核会按顺序将下一个可用的

进程号分配给其使用。每当进程号达到 32767 的限制时,内核将重置进程号计数器,以便从

小整数开始分配。


一旦进程号达到 32767,会将进程号计数器重置为 300,而不是 1。之所以如此,是因

为低数值的进程号为系统进程和守护进程所长期占用,在此范围内搜索尚未使用的进程号

只会是浪费时间。

在 Linux2.4 版本及更早版本中,进程号的上限 32767,由内核常量 PID_MAX 所定义。

在 Linux 2.6 版本中,情况有所改变。尽管进程号的默认上限仍是 32767,但可以通过 Linux

系统特有的/proc/sys/kernel/pid_max 文件来进行调整(其值=最大进程号+1)。


在 32 位平台中, pid_max 文件的最大值为 32768, 但在 64 位平台中, 该文件的最大值可以高达到 222(约400 万),系统可能容纳的进程数量会非常庞大。

getppid()可以检索到父进程的进程号

每个进程的父进程号属性反映了系统上所有进程间的树状关系。每个进程的父进程又有自己的父进程,以此类推,回溯到 1 号进程—init 进程,即所有进程的始祖。


pstree命令可以查看到这一“家族树”( family tree)。


如果子进程的父进程终止,则子进程就会变成“孤儿”, init 进程随即将收养该进程,子进程后续对 getppid()的调用将返回进程号 1。


通过查看由 Linux 系统所特有的/proc/PID/status 文件所提供的 PPid 字段,可以获知每个进程的父进程


相关实践学习
CentOS 7迁移Anolis OS 7
龙蜥操作系统Anolis OS的体验。Anolis OS 7生态上和依赖管理上保持跟CentOS 7.x兼容,一键式迁移脚本centos2anolis.py。本文为您介绍如何通过AOMS迁移工具实现CentOS 7.x到Anolis OS 7的迁移。
目录
相关文章
|
7月前
|
Linux
Linux 查看进程PID和线程CPU和内存占用情况
Linux 查看进程PID和线程CPU和内存占用情况
782 0
|
Linux 测试技术 开发工具
Linux的进程pid编号极限
整理本文,起源是看到知乎上的一个问题,为什么Linux的进程pid编号极限最大值( process pid max)是131070?
214 0
|
4月前
|
关系型数据库 MySQL Linux
【Linux】通过 PID 获取服务信息 带你玩转 linux
【Linux】通过 PID 获取服务信息 带你玩转 linux
|
6月前
|
应用服务中间件 Linux nginx
蓝易云 - Linux使用pid文件结束nginx
以上就是使用pid文件结束nginx进程的方法。
36 0
|
7月前
|
Linux Shell
【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】
【Linux】解决:为什么重复创建同一个【进程pid会变化,而ppid父进程id不变?】
|
7月前
|
存储 监控 安全
深度剖析Linux进程的内部机制:一探/proc/pid的奥秘
深度剖析Linux进程的内部机制:一探/proc/pid的奥秘
1049 0
|
存储 Linux 虚拟化
Linux6.1中为什么用Radix树替换位图(bitmap)来管理进程pid
在过去的几十年中,Linux内核为了有效地管理进程,采用了位图(bitmap)数据结构来记录和跟踪进程的PID。我们知道Linux支持的最大进程数量为65535个,那么用位图来表示的话只需要16位bit就够了,这大大节约了内存空间,随着系统规模的扩大和复杂性增加,尤其是云计算、容器等新兴虚拟化技术大爆发的时代中,操作系统经常会在短时间内快速创建或者销毁大量进程,在这种场景下位图的全面查找时性能问题就逐渐暴露出来了。为了解决这些问题,Linux内核逐渐采用radix树(radix-tree)来替代位图,对进程PID进行管理,这个替换的思路就是用空间换时间。
|
关系型数据库 MySQL Linux
Linux下MySQL起动报错The server quit without updating PID file
Linux下MySQL起动报错The server quit without updating PID file
158 0
|
Linux Apache
百度搜索:蓝易云【Linux查看进程PID的方法?】
在Linux系统中,进程是指正在运行的程序。每个进程都有一个唯一的进程 ID(PID),可以用来识别和管理它们。
246 0
|
Shell Linux 调度
【linux】进程|查看进程|PID值|fork原理(下)
【linux】进程|查看进程|PID值|fork原理(下)
160 1