Linux 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 字段,可以获知每个进程的父进程
 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyySophia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值