文章目录
程序
是存储在某种介质上的二进制代码,进程对应了程序的执行过程。
进程
是程序在某个数据集合上的依次运行,是系统资源分配和调度的独立单位。
进程的管理
描述+组织
操作系统通过 struct task_struct 对每个进程进行描述,然后利用双向链表将这些结构体组织起来。而每个struct task_struct就是一个进程控制块PCB(process control block).
struct task_struct
1. 进程号
PID:进程标识符,在操作系统中唯一标识一个进程。
//查看mymain的进程号
ps aux|grep ./mymian
2. 进程状态
-
从系统调度角度看,多个进程抢占式执行,os给每个进程赋予不同的状态后实现对不同进程的合理调度。
-
通过ps aux 命令可以看到Linux系统中有这些状态:
R:运行
S:睡眠
D:深度睡眠/不可中断睡眠
T:暂停
t:追踪(gdb调试)
X:死亡
Z:僵尸
<: 高优先级
N:低优先级
L:内存锁页
W:无驻留页
l:多线程进程
s:控制进程
+:前台进程
僵尸进程
子进程先于父进程退出,退出时给父进程发送SIGCHLD信号,父进程收到后忽略处理,导致子进程的退出信息没有进程回收,因此变成了僵尸进程。
危害:系统资源泄漏,没有释放task_struct。
解决办法:
进程强杀已经不起作用了。
- 终止父进程
- 关机
- 进程等待。
孤儿进程
父进程先于子进程退出,子进程状态为S,由一号进程(init进程)回收,无害。
// 查看父子进程PID
[jiahao@VM-0-17-centos relook]$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 May13 ? 00:21:16 /usr/lib/systemd/systemd --switched-root --s
root 2 0 0 May13 ? 00:00:05 [kthreadd]
3. 内存指针
指向程序地址空间,和进程相关数据的指针,共享内存的指针。
4. 上下文信息
保存进程上次运算时寄存器的值
5. 程序计数器
保存下一条指令的地址
6. IO信息
保存打开文件的信息,IO请求,分配给进程的IO设备,被使用的文件列表
7. 记账信息
cpu和内存占用情况,时间限制
8. 进程优先级
通过ps命令可以查看进程的信息
[jiahao@VM-0-17-centos relook]$ ps -al
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1002 4356 1945 0 86 0 - 3307 hrtime pts/1 00:00:00 m
0 R 1002 4542 29064 0 80 0 - 38332 - pts/0 00:00:00 ps
PRI:优先级(越小优先级越高)
NI:优先级影响值(nice)
PRI+NI =新优先级
- 普通优先级:100~139
- 实时优先级:0~99
nice:修改普通优先级,范围是(-20到19)
修改优先级
进入top后执行
r -》pid -》 nice值
[jiahao@VM-0-17-centos relook]$ ./m
[jiahao@VM-0-17-centos relook]$ ps -al
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1002 4356 1945 0 86 0 - 3307 hrtime pts/1 00:00:00 m
0 R 1002 4542 29064 0 80 0 - 38332 - pts/0 00:00:00 ps
[jiahao@VM-0-17-centos relook]$ top
3. 输入r 回车
4. 输入PID回车
5. 输入新的nice值回车
[jiahao@VM-0-17-centos relook]$ ps -al
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
0 S 1002 4356 1945 0 80 6 - 3307 hrtime pts/1 00:00:00 m
0 R 1002 4384 29064 0 80 0 - 38332 - pts/0 00:00:00 ps