概念

进程(0process)是一个可执行程序的实例。
进程是由内核定义的抽象的实体,并为该实体分配用以执行程序的各项系统资源。

程序是包含了一系列信息的文件:

  1. 二进制格式标识
  2. 机器语言指令
  3. 程序入口地址
  4. 数据
  5. 符号表和重定位表
    1. 描述程序中函数和变量的位置和名称
    2. 用途:调试和运行时的符号解析(动态链接)
  6. 共享库和动态链接信息

程序文件中的一些字段列出了程序运行时需要使用的共享库,以及加载共享库的动态链接器的路径名。

从内核角度看,进程由用户内存空间(user-space memory)和一系列内核数据结构组成,用户内存空间包含程序代码及代码所使用的的变量,内核数据结构用于维护进程状态信息。

进程的内存布局

创建和执行进程

进程ID和父进程ID

进程终止和终止状态

1._exit()系统调用或相关的exit( )库函数,请求退出,进程自己指明终止状态。

  1. 向进程传递信号,将其kill,根据导致进程kill的信号类型设置进程的终止状态。

无论进程以什么方式退出都会生成“终止”状态,一个非负小整数,可供父进程wait()系统调用检测,终止状态为0则为正常退出,非0则有错误发生。

init进程

系统引导时内核创建init进程,是“所有进程之父”,对应的程序文件为/sbin/init。init进程pid总为1,以root权限运行。
主要任务是创建并监控系统运行的系列进程。
所有其他进程都是init和其后代通过fork()创建的。

守护进程

httpd