导图社区 进程与线程思维导图
进程与线程的知识内容有进程相关概念、PCB进程控制块、环境变量、进程控制、进程共享、GDB、exec函数族、回收子进程。
为了给设备和磁盘文件提供一个更高层更有效的接口,Linux提供了一系列的标准函数库。下图介绍了C语言文件IO函数、Linux系统IO函数。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
进程
进程相关概念
程序
编译好的二进制文件
不占用系统资源
运行起来的程序
占用系统资源
并发
一个时间段内多个程序并行执行
单道程序设计
多道程序设计
宏观并行,微观串行
时钟中断
CPU
预取器
译码器
算逻单元
寄存器堆
MMU
虚拟物理内存映射
page 4k
设置内存访问级别
......
参考书
《操作系统原理》 谢青松
《计算机硬件及组成原理》 Arnold S.Berger
PCB进程控制块
本质:struct task_struct结构体
进程ID
进程状态
就绪
运行
挂起(阻塞)
终止
进程切换时保持的寄存器值
描述虚拟地址信息
描述控制终端信息
当前工作目录
umask掩码
文件描述符表
信号相关信息
用户id、组id
会话和进程组
进程可用资源上限 ulimit -a
环境变量
特征
字符串
name=value
值用来描述环境信息
常用环境变量
PATH
指定可执行文件搜索路径
SHELL
指定当前所使用的命令解析器
TERM
当前终端类型
LANG
指定语言环境
HOME
用户主目录
函数
getenv函数
获取环境变量值
setenv函数
设置环境变量值
参数3:
1 覆盖原值
0 不覆盖
unsetenv函数
删除环境变量
进程控制
fork函数
创建一个子进程
返回
父进程:返回子进程PID
子进程:返回0
循环创建N个子进程
使用循环因子标识每个子进程
getpid函数
getppid函数
getuid/geteuid函数
getgid/getegid函数
进程共享
fork后父子进程
相同
全局变量
.data
.text
栈、堆
宿主目录
进程工作目录
信号处理方式
不同
fork返回值
父进程ID
进程运行时间
定时器
未决信号集
父子进程共享
文件描述符(打开文件的结构体)
mmap建立的映射区
读时共享、写时复制
gdb
set follow-fork-mode child 跟踪子进程
set follow-fork-mode parent 跟踪父进程(默认)
exec函数族
作用:执行指定程序
进程id不变
代码段、数据段被新程序替换
execlp函数
使用PATH环境变量加载程序
execl函数
使用路径+程序名加载程序
execvp函数
使用自定义环境变量表加载程序
命名一般规律
l:命令行参数列表
p:使用PATH环境变量
v:使用命令行参数数组
e:environ 自定义一个环境变量表
成功:不返回
失败:-1,设置errno
回收子进程
僵尸进程
进程终止
PCB残留
父进程未回收
孤儿进程
父进程先终止
进程孤儿院(init)
wait函数
作用
阻塞等待子进程退出
回收子进程残留资源
获取子进程退出状态
返回值
成功:0
失败:-1(无子进程)
参数:int *status(传出参数)
进程正常结束
WIFEXITED(status) 真
WEXITSTATUS(status) 获取退出值
异常终止
WIFSIGNALED(status) 真
WTERMSIG(status)获取使之终止信号编号
暂停
WIFSTOPPED(status)真
WSTOPSIG(status)获取使之暂停信号编号
WIFCONTINUED(status) 真 表示暂停后继续执行
waitpid
指定进程清理
可设置非阻塞状态
参数
参1:pid
> 0 回收指定ID子进程
-1 回收任一子进程(等同wait)
0 回收同组子进程
< -1 回收指定进程组内任一子进程
参2:status
参3:options
WNOHANG
> 0
成功清理掉的子进程ID
-1
清理失败(无子进程)
0
参3指定了WNOHANG,且子进程未结束
注意事项
wait/waitpid只能回收子进程
一次wait或waitpid调用只能清理一个子进程