Linux系统进程管理全解析
1. 进程的定义
进程是正在执行的程序实例。与程序或命令不同的是,一个程序可以同时启动多个进程。每个进程会使用多种资源,具体如下:
- 内存中的地址空间
- 具有一些安全属性,如所有权、权限等
- 拥有一个状态
- 具备本地和全局环境变量
- 有调度上下文
- 分配了资源,如文件描述符、网络端口等
内核通过为每个进程分配唯一的进程ID(PID)来跟踪进程。用户程序通过内核维护的/proc/PID目录访问每个进程的信息。
2. Linux系统中的进程创建
在CentOS 7系统中,所有进程都是第一个系统进程systemd的后代。现有进程(父进程)通过fork系统调用复制自己的地址空间,从而创建新进程(子进程)结构。每个新进程都会被分配一个唯一的PID,用于跟踪进程状态、CPU使用情况、内存使用情况等特征。通常,创建新进程时,PID按升序分配,systemd进程的PID为1。PID和PPID(父进程ID)是Linux系统中每个运行进程的属性。
PPID是启动子进程的父进程的PID。如果父进程死亡,该子进程就成为孤儿进程。长期以来,孤儿进程由init(PID = 1)进程收养,但在较新的内核中,kthread(PID = 2)成为收养孤儿子进程的进程。
对于单线程进程,线程ID(TID)与PID相同;对于多线程进程,每个线程共享相同的