进程学习篇
-
一、进程基础
- 进程和程序的区别
- 进程是执行中的程序,包含程序代码、数据和堆栈等
- 程序是存储在磁盘上的代码和数据
- 进程内容
- BSS段:未初始化的全局变量
- 数据段:已初始化的全局变量
- 代码段:程序执行代码
- 堆:动态分配的内存
- 栈:局部变量等
- PCB:进程控制块,包含进程ID、状态、打开的文件描述符等
- 进程类型
- 交互进程:需要用户输入
- 批处理进程:不需要用户交互
- 守护进程:后台运行的服务进程
-
二、进程管理
- 查看进程
ps
:查看当前进程快照top
:动态显示进程信息/proc
:查看进程详细信息
- 进程状态
- 运行态:占用CPU
- 等待态:等待资源
- 停止态:暂停执行
- 死亡态:进程结束
- 进程优先级
nice
:设置进程运行时的nice值,范围-20~19renice
:改变已运行进程的nice值
- 后台进程
jobs
:查看后台进程bg
:将暂停进程转为后台运行fg
:将后台进程转为前台运行Ctrl+z
:将前台进程转为后台暂停
-
三、进程间关系
- 创建子进程
fork
:创建子进程,返回值区分父子进程- 子进程继承父进程资源,但地址空间独立
- 进程退出
exit
:退出进程,刷新缓冲区_exit
:退出进程,不刷新缓冲区
- 回收子进程
wait
:等待任意子进程结束waitpid
:等待指定子进程结束
- 进程间通信
- 管道、消息队列、共享内存、信号量等
-
四、守护进程
- 守护进程
- 后台独立运行的服务进程,如httpd、mysqld
- 使用
nohup
命令简化创建
- 会话和进程组
setsid
:创建新会话,成为会话首进程和组长进程getsid
:获取进程所属会话ID
- 进程调试
- GDB调试多进程程序,可设置调试父进程或子进程
-
set follow-fork-mode child 设置GDB调试子进程
-
set follow-fork-mode parent 设置GDB调试父进程
-
set detach-on-fork on/off 设置GDB跟踪调试单个进程或多个
-
info inferiors 显示GDB调试的进程
-
inferiors 进程序号(1,2,3....) 切换GDB调试的进程
-
五、进程控制
- 进程控制块(PCB)
- 包含进程状态、程序计数器、寄存器状态、内存管理信息、打开的文件描述符等。
- 每个进程对应一个PCB,由操作系统内核维护。