【摘自《Linux/Unix系统编程手册》】
进程和程序
进程(process)是一个可执行程序(program)的实例。
程序是包含了一系列信息的文件,这些信息描述了如何在运行时创建一个进程,包含如下内容:
从内核角度看,进程由用户内存空间和一系列内核数据结构组成,其中用户内存空间包含了程序代码及代码所使用的变量,而内核数据结构则用于维护进程状态信息。
记录在内核数据结构中的信息包括许多与进程相关的标识号、虚拟内存表、打开文件的描述符表、信号传递及处理的有关信息、进程资源使用及限制、当前工作目录和大量的其它信息。
每个进程都有一个进程号(PID),进程号是一个正数,用以唯一标识系统中的某个进程。
Linux内核限制进程号需小于等于32767。新进程创建时,内核会按顺序将下一个可用的进程号分配给其使用。每当进程号达到32767的限制时,内核将重置进程号计数器,以便从小整数开始分配。
(实际上,一旦进程号达到32767,会将进程号计数器重置为300,而不是1。因为低数值的进程号为系统进程和守护进程所长期占用。)
在Linux2.4版本及更早的版本,进程号的上限是32767,有内核常量PID_MAX所定义。在Linux2.6中,情况有所改变,尽管进程号的默认上限仍为32767,但可以通过Linux系统中特有的/proc/sys/kernel/pid_max文件来进行调整(其值=最大进程号+1)。在32位平台中,pid_max文件的最大值为32768,但是在64位平台中,该文件的最大值可以高达222(约400万),系统可能容纳的进程数量会非常庞大。
每个进程都有一个创建自己的进程,每个进程的父进程号属性反应了系统上所有进程间的树状关系。每个进程的父进程又有自己的父进程,以此类推,回溯到1号进程--init进程,即所有进程的始祖。
如果子进程的父进程终止,则子进程就会变成“孤儿”,init进程随即将收养该进程。
原文:http://www.cnblogs.com/jingyg/p/5069964.html