前言
我已无暇顾及过去,我要向前走!
一、进程
1.进程的概念
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
狭义定义:进程是正在运行的程序的实例(an instance of a computer program that is being executed)。
广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
2.进程的特性
动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
并发性:任何进程都可以同其他进程一起并发执行
独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
结构特征:进程由程序、数据和进程控制块三部分组成。
3.进程的状态
在多任务处理操作系统中,每个CPU(或核心)在一个时间点上只能处理一个进程。在进程运行时,它对CPU时间和资源分配的要求会不断变化,从而为进程分配一个状态,它随着环境要求而改变。
R运行状态(runing): 表明进程要么在运行中要么在运行队列里,并不意味着进程一定在运行中。
S睡眠状态(sleeping):意味着进程在等待事件的完成(这里的睡眠有时候也叫做可中断睡眠)
D磁盘睡眠状态(Disk sleep): 有时候也叫做不可中断睡眠,在这个状态的进程通常会等待IO的结束
T停止状态(stopped):可以通过发送SIGSTOP信号给进程来停止(T)进程。这个被暂停的进程可以通过发送SIGCNT信号让进程继续运行。
Z僵尸状态(zombie):通知父进程回收所有的资源
X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
- 僵尸进程:当一个进程fork一个子进程之后,如果子进程退出,而父进程没有利用wait 或者 waitpid 来获取子进程的状态信息,那么子进程的状态描述符依然保存在系统中。
- 孤儿进程:当一个父进程fork一个子进程之后,父进程突然被终止了,那么这个子进程就成为了一个孤儿进程,它会被init进程接管
二、Linux中的进程管理
1.查看进程
ps 静态查看进程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
USER 运行进程的用户
PID 进程ID
%CPU CPU占用率
%MEM 内存占用率
VSZ 占用虚拟内存
RSS 占用实际内存 驻留内存
TTY 程序运行的终端
STAT 进程状态 man ps(/STATE)
R 运行
S 可中断睡眠 Sleep
D 不可中断睡眠
T 停止的进程
Z 僵尸进程
X 死掉的进程
Ss s进程的领导者,父进程
S< <优先级较高的进程
SN N优先级较低的进程
R+ +表示是前台的进程组
Sl 以线程的方式运行
START 进程的启动时间
TIME 进程占用CPU的总时间
COMMAND 进程文件,进程名
- aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程;
x:与终端无关的进程; - axo 自定义想要查询的字段值
- elf
‐e:显示所有进程
-l:长格式显示
‐f:显示完整格式程序信息
top: 动态显示系统相关资源的管理器,有点类似于windows当中的任务管理器
2.用信号控制进程
kill
重点记忆 -9 -15 -18 -19
编号 | 信号名 | 作用 |
---|---|---|
1 | SIGHUP | 重新加载配置 |
2 | SIGINT | 键盘中断^C |
3 | SIGQUIT | 键盘退出 |
9 | SIGKILL | 强制终止 |
15 | SIGTERM | 终止(正常结束),缺省信号 |
18 | SIGCONT | 继续 |
19 | SIGSTOP | 停止 |
20 | SIGTSTP | 暂停^Z |
pkill
-9 -u + username
-9 -t + tty 断掉
3. 进程优先级
一般我们会通过修改nice值的方式来影响进程的优先级,进而影响到被调度的积极性
nice 越nice越不争,值越高优先级越低
nice -n -5 sleep 6000 &
renice 给已经在运行的进程重新修改nice值
renice -20 -10762
4.作业控制
运行命令时 结尾加& 命令丢至后台
jobs查看后台任务
bg% 让后台进程开始运行
fg% 让后台进程到前台来运行
kill %数字,结束某后台进程
screen
-S 字符串 开启一个新的终端
-r 序列号 连接进一个终端
ctrl+a+d 离开终端
总结
以上就是今天总结的内容,本文仅仅简单介绍了进程及其管理。感兴趣的小伙伴可以再多多阅读其他的详细博客进行进一步学习。