Linux进程管理
1、进程和程序
程序:一组指令以及参数集合,按照相应的逻辑控制计算机完成特性任务
进程:运行的程序,动态。操作系统上的基本单位,生命周期,状态
- 操作系统以进程为单位分配系统资源
- 每一个进程运行是独立的
- 具有独立的地址空间,运行状态
- 多个程序同时运行,每一个程序就是一个进程
程序和进程的区别
- 程序是静态的,它只是一组指令的集合,不具有任何的运行意义,而进程是程序运行的动态过程。
- 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程。
- 进程还具有并发性和交互性,而程序却是封闭的。
linux程序:系统、用户、固件
(指令,参数)
程序—>系统调用---->缓存(内存)---->CPU处理 执行任务
特点:静态的、封闭的
程序----运行---->进程1,进程2,进程3…
特点: * 动态
* 有生命周期
* 运行状态
* 操作系统运行的基本单位
* 并发性、交互性
扩展:
应用(应用程序)
|
内核(内核文件、内核模块、驱动)
| 固件(芯片+程序)
硬件
2、进程和线程
进程——线程1,线程2…——>线程把整个任务完成之后,才能运行
(linux:进程,线程——>独立的资源集),入口,序列,出口)
进程和线程的区别
- 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有
- 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,它必须组成进程 才能被执行
3、父进程和子进程
父进程——>子进程——>子进程
父进程的资源,权限
运行自己的程序(exec)
—exit()
唤醒 |
<—————— 僵尸进程
子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。
4、进程的管理工具
pstree 进程树 查看进程之间的关系
-p 显示pid
-u 显示用户
ps
-a 显示所有进程
-u 显示以用户为主的进程
x 和au配合使用,显示完整信息
-l:较长、较详细的将该PID的信息列出
- F:代表这个程序的旗标(flag),4代表使用者为superuser;
- S:代表这个程序的状态(STAT);
- UID:代表执行者身份
- PID:进程的ID号
- PPID:父进程的ID
- C:CPU使用的资源百分比
- PRI:指进程的执行优先权,其值越小越早被执行
- NI:进程的nice值,表示进程可被执行的优先级的修正数值
- ADDR:这个是内核函数,指出该程序在内存的那个部分。如果是个执行的程序,一般就是【-】
- SZ:使用掉的内存大小
- WCHAN:目前这个程序是否正在运作当中,若为 - 表示正在运行
- TTY:登入者的终端机位置
- TIME:使用掉的CPU时间。
- CMD:所下达的指令名称
- USER:该属于哪个使用者账号
- PID:该进程的进程ID 号
- %CPU:该进程使用掉的CPU资源百分比
- %MEM:该进程所占用的物理内存百分比
- VSZ;该进程使用掉的虚拟内存量
- RSS:该进程所占用的固定的内存量
- TTY:该进程是在哪个终端机上运作,若与终端机无关,则显示?。另外,tty1-tty6是本机上面的登 入者程序,若为pts/0等等的,则表示为由网络连接进主机的程序。
- STAT:该程序目前的状态
- START:该进程被触发启动的时间
- TIME:该进程实际使用CPU运作的时间
- COMMAND:该程序的实际指令
kill killall pkill
-9 杀死进程
-w 等待进程死亡
-l 列出已知信号
kill 选项 pid
说明:
只有第9种信号(SIGKILL)才可以无条件终止进程,其他信号进程都有权利忽略。 下面是常用的信号:
INT 2 中断(同Ctrl+c)
QUIT 3 退出(同Ctrl+\)
TERM 15 终止
KILL 9 强制终止
CONT 18 继续(与STOP相反,fg/bg命令)
STOP 19 暂停(同Ctrl+z)
实例1:得到指定信号值
实例2:先用ps查找进程,然后用kill杀掉
命令:kill 1615
实例3:彻底杀死进程
命令:kill -9 1615
pgrep
-l:同时显示进程名和PID
-o:当匹配多个进程时,显示进程号最小的那个
-n:当匹配多个进程时,显示进程号最大的那个
htop
htop姑且称之为top的增强版,相比top其有着很多自身的优势。如下:
- 两者相比起来,top比较繁琐
- 默认支持图形界面的鼠标操作
- 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行
- 杀进程时不需要输入进程号等
安装完htop后,直接输入htop出现以下界面
在上图中将输出的界面划分成了四个区域,其中: 上左区域:显示了CPU、物理内存和交换分区的信息; 上右区域:显示了任务数量、平均负载的连接运行时间等信息; 进程区域:显示出当前系统中的所有进程;这里同top显示一致; 提示区域;
上图进程区域的各项分别为:
PID:进程的标识号
USER:运行此进程的用户
PRI:进程的优先级
NI:进程的优先级别值,默认的为0,可以进行调整
VIRT:进程占用的虚拟内存值
RES:进程占用的物理内存值
SHR:进程占用的共享内存值
S:进程的运行状况,R表示正在运行、S表示休眠,等待唤醒、Z表示僵死状态
%CPU:该进程占用的CPU使用率
%MEM:该进程占用的物理内存和总内存的百分比
TIME+:该进程启用后占用的总的CPU时间
COMMAND:进程启动的启动命令名称
提示区域
F1:显示帮助信息
F2:配置界面中的显示信息
F3:搜索进程
搜索到的进程会用设定的颜色标记出来,方便查看
F4:过滤器
F5:以树形方式显示
F6:排序方式
F7,F8:调整进程nice值
F7表示减小nice值(增大优先级),F8增大nice值(减小优先级)nice值得范围为-20-19
F9:杀死进程
选择某一进程按F9即可杀死此进程
F10:退出htop
vmstat:常见的linux监控工具
(参数)
lsof 文件句柄
- -u :uname/uid 显示归属uname/uid的进程情况
- -g: gname/gid 显示归属gname/gid的进程情况
- -i:用以显示符合条件的进程的情况
- -p 123:列出进程号为123的进程所打开的文件
- -c abc : 显示出以abc开头,进程打开的文件
- +d:/usr/local/显示目录下被进程开启的文件
- +D:/usr/local/同上,但是会搜索目录下的目录,时间较长
- -d 4 :显示使用fd为4的进程
losf输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
USER:进程所有者
FD:文件描述符,应用程序通过文件描述符识别该文件。
TYPE:文件类型
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
实例:lsof -d 4 显示使用fd为4的进程
5、进程优先级
进程优先级划分【0-139】 (数字越小优先级越高)
【0-99】:有效实时优先级
【100-139】:非有效实时优先级——调整nice【-20,19】
进程管理;系统资源分配
进程的优先级:默认都是0
静态优先级100-139管理员手动调整优先级
动态优先级0-99数字越小优先级越高,实时优先级
nice值调整的方法:
top “r” ——enter; 输入PID——enter;输入nice值——enter
renice【-29,19】PPID
htop F7 减 F8 加
NI:nice值【-20-19】
renice 优先级 进程号 (top)修改优先级
ps -el
PRI:静态优先级-40
6、进程的状态
sleeping----睡眠状态
stopping----停止状态
running----运行状态
zombie----僵死状态
实时变化的
7、进程在前后台的运行、作业控制
在前台一次只能运行一个作业。
在后台可以运行多个作业
ping 192.168.1.130 >/dev/null 2>&1 &
jobs 查看后台作业;与终端,不同终端上的作业要在对应的终端上查看。
fg %job编号:把后端作业提到前端
bg %job编号: 把后台作业运行起来
ctrl +z:挂起
kill %job编号:先停止,再杀死。
ping 192.168.1.130 & 已经在后台运行,在前台输出结果;不影响前台作业执行
8、linux系统
1、linux系统结构,在X86平台的CPU,是如何执行内核程序和用户程序的。
- ring0:与硬件相关或者硬件寄存器,总线控制的相关程序——内核程序。
- ring1-2:驱动程序或者与虚拟化相关的程序。
- ring3:用户态的程序
2、/proc 正在运行的内核信息映射
主要输出:进程信息;内存资源信息;磁盘分区信息等等
- /proc下文件基本都是只读的,除了/proc/sys目录,它是可写的(查看和修改内核的运行参数)
- /proc下数字命令的目录就是对于PID的进程目录
- /proc目录中进程N的信息每一个进程中基本包含以下信息
3、/sys 硬件设备的驱动程序信息
sysfs是基于ram文件系统和proc一样。Sysfs文件系统是一个类似于proc文件系统的特殊文件系统,用于将系统中的设备组织成层次结构,并向用户模式程序提供详细的内核数据结构信息。其实,就是在用户态可以通过对sys文件系统的访问,来看内核态的一些驱动或者设备等。