进程与线程
1.进程(process)
定义:进行中的程序 - - 正在运行中的程序
进程 --- 程序的一次执行的过程
进程 是程序的一个实例
2.进程 vs 程序
1)进程是运行后的程序
2)一个程序可以对应多个进程
3)./ a.out是程序与进程的枢纽
4)程序在内存上运行变为进程
3.进程的作用,为什莫需要进程
1)为了描述和管理 程序运行 的动态过程
2)是为了操作系统 管理 程序动态运行的过程
3)知道程序运行到什么位置 PCB(Process Control Block)
4.进程的组成
程序的组成
.c //程序源代码
a.out // 可执行程序
程序 = 代码 + 数据
1)代码区: 标准 c程序 在内存中的布局
linux 下程序在内存中的典型布局,
2)进程 = PCB + 进程实体(text | data | bss |堆 | 栈)
栈 堆 bss data text
PCB
5.进程的生命周期
进程的工作状态(三态模型)
进程状态
linux系统
R ---- 运行或可运行 ---就绪态
S ----- 可中断的睡眠态
D ----- 不可中断的睡眠态
T ---- 暂停态
Z -----僵尸态
1)表现形式:宏观并行,微观串行
深度睡眠:不可中断态
浅度睡眠:可中断态
命令符: PS 反应当前状态进程的信息
PStree 进程之间的关系
ps aux | grep 程序名
主要查看 某个进程的pid号 及 状态信息
ps - elf | grep 程序名
主要查看 父子进程 包含 pid ppid
pstree -sp uid号 查看父子进程之间的关系
kill //杀死----给进程发信号
kill -l 查看kill 的可以发送信息
kil -9 uid 号 结束uid 对应的程序
kill -19 uid号 暂停uid对应的程序
kill -18 uid号 继续运行暂停的Uid对应的程序
killall 对全部进程进行操作
格式为: killall -操作序号 对应程序名//
加号表示程序运行的 前台 ,前景 。是对进程状态的修饰
进程的创建
1.fork()
pid_t fork(void)
功能: 创建一个子进程()
返回值:![](https://i-blog.csdnimg.cn/direct/063bc43cdbec4c0684aecb39445fe49d.png)
创建成功在父进程中返回子进程的pid号, 在子进程中返回0,创建失败返回-1,并且没有子进程被创建。
注意: pid号 实际上是一个 非负 整数
最小的pid号 --- 1
!!创建成功会返回两次,一次在父进程,返回大于0
一次在子进程返回0
32位的平台,每个进程拥有独立的4G空间(3G用户空间,1G内核空间)(虚拟的)
2.每个进程拥有自己独立的4G空间
3.父子进程间数据互相独立。各自拥有独立的空间。
4.父子进程运行顺序,不确定。取决于操作系统—先调度谁。