进程ID
在电脑领域,进程标识符(英语:process identifier,又略称为进程ID(英语:process ID)、PID)是大多数操作系统的内核用于唯一标识进程的一个数值。这一数值可以作为许多函数调用的参数,以使调整进程优先级、杀死进程之类的进程控制行为成为可能。
类UNIX系统
在类UNIX操作系统中,新进程都衍自系统调用fork()。fork()调用会将子进程的PID返回给父进程,使其可以之指代子进程,从而在需要时以之为函数参数。例如,若以子进程PID为参数调用waitpid(),可使父进程以休眠状态等待子进程结束;若以之为参数调用kill(),便可结束对应子进程。
在各PID中,较为特别的是0号PID和1号PID。PID为0者为交换进程(英语:swapper),属于内核进程,负责分页任务;PID为1者则常为init进程,主要负责启动与关闭系统。值得一提的是,1号PID本来并非是特意为init进程预留的,而init进程之所以拥有这一PID,则是因为init即是内核创建的第一个进程。不过,现今的许多UNIX/类UNIX系统内核也有以进程形式存在的其他组成部分,而在这种情况下,1号PID则仍为init进程保有,以与之前系统保持一致[1]。
PID的分配机制则因系统而异,一般从0开始,然后顺序分配,直到达到一个最大值(亦因系统而异),而后又从300开始重新分配;在Mac OS X和HP-UX下,则是由100开始重分配。在分配PID时,若遇到已分配的PID,则直接跳过,继续递增查找下一个可分配PID。
Microsoft Windows
Microsoft Windows系列操作系统提供了一系列API,以使开发者可以获取相关PID,如用于获取当前进程PIDGetCurrentProcessId()
[2]、返回其他进程PID的GetProcessId()
[3]。在操作系统内部,进程ID与线程ID在同一个命名空间中,因此二者不会重合。
PID文件
有些长时间运行的进程(如MySQL的守护进程)会将自己的PID写入一个文件,以使其他进程可寻获之。
参见
参考资料
- ^ ISRD Group. Basics Of Os Unix And Shell Programming. Tata McGraw-Hill Education. 2006.
- ^ GetCurrentProcessId Function, Windows Developer Center, [2009-05-20], (原始内容存档于2009-06-27)
- ^ ProcessId Function, Windows Developer Center, [2011-03-05], (原始内容存档于2011-03-22)