描述进程
- task_struct – >进程控制块 -->PCB
- 进程标识符(pid):进程产生时, 在操作系统分配唯一的 pid
- 进程状态:就绪状态 运行状态 阻塞状态
- 程序计数器:保存下一个指令
- 内存指针:指向进程地址空间
- 上下文数据:保存上次执行的寄存器信息,当下一次获得时间片时,从上下文数据获得寄存器的值
7.IO信息 & 记账信息
/proc/[pid]/fd :查看当前打开文件描述符信息,操作是管理我们软件,会创建一个与pid数值一直的文件夹,保存进程信息
cpu密集型程序:高频使用CPU IO密集型程序
获取当前进程的pid
#include<unistd.h>
pid_t getpid(void); //当前节点的id
pid_t getppid(void); //获取父节点的id
前台进程 & 后台进程
eg: "./out &"执行程序的时候加一个&符号将进程放到后台去运行
fg: 将后台进程调到前台进行
fork:(直接复制PCB和内存 复制相同的)
抢占式执行, 抢 cpu 去执行
代码共享,数据独有
kill + [pid] 杀死正在运行的进程 kill -9 [pid]强杀任何进程
进程状态
R(Running):运行状态,在就绪队列及正在运行的的进程
S(Sleep):睡眠状态,(可以打断睡眠)
D(Disk Sleep):磁盘睡眠状态,(要打醒)等待IO资源的时候
T(Stopped):暂停状态,(ctrl + z)
t(trace):跟踪状态,(例如GDB进行调试)
X(dead):死亡状态
Z(zombie):僵尸状态,会造成内存泄漏(无法释放PCB) (为什么会有僵尸状态)
孤儿进程:它的父进程变成init进程 (pid 为 1)
环境变量:
作用:为了保证OS能顾正常的运行所设立的一些变量
常见的环境变量:(使用指针数组进行存储)
PATH:命令或者可执行程序的搜索路径
HOME:刚登陆上来的工作目录
LD_LIBRARY_PATH:动态库或者静态库的一个搜索路径
SHELL:获取当前SHELL
常见的命令
echo
[
环
境
变
量
]
e
n
v
查
看
系
统
的
环
境
变
量
(
临
时
生
效
)
e
x
p
o
r
t
P
A
T
H
=
[环境变量] env 查看系统的环境变量 (临时生效)export PATH=
[环境变量]env查看系统的环境变量(临时生效)exportPATH=PATH:[一个路径] 添加环境变量
(永久生效)/etc/bashrc ~/.bashrc(隐藏文件) ~./bash_profile
sourse (~/.bash_profile) 使刚刚改变的环境变量生效
set 设置环境变量
unset $环境变量 去除环境变量
如何使用代码获得环境变量
1. main函数的参数 char* env[]
2. libc库中的全局变量environ
3. getenv(const char* name)
程序地址空间
进程优先级:
top 查看 PR ,PR值越低,优先级越高 进入后 r 更改priority(root去更改)
PR(new) = PR(old) + NI(nice) NI取值范围:-20 ~ 19
更改优先级:
renice -n 更改的值 -p [pid] (进程调度的解释权归操作系统)