Linux的进程管理(基础篇)
一.进程简介
1.什么是进程
进程就是处于执行期的程序(目标代码存放在某种存储介质上)。但进程并不仅仅局限于一段可执行程序代码(Unix 称为代码段,text section)。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程(thread of execution),当然还包括用来存放全局变量的数据段等。实际上,进程就是正在执行的程序代码的实时结果。内核需要有效而又透明地管理所有细节。
简单来说
进程就是已启动的可执行程序的运行实例,进程有以下组成部分:
• 已分配内存的地址空间;
• 安全属性,包括所有权凭据和特权;
• 程序代码的一个或多个执行线程;
• 进程状态。
程序: 二进制文件,静态 /usr/bin/passwd ,/usr/sbin/useradd
进程: 是程序运行的过程, 动态,有生命周期及运行状态。
2.进程的状态
进程状态包括以下五种:
(1)task_running(运行态):进程是可执行的;或者正在执行,或者在运行队列中等待执行。
(2)task_interruptible(可中断睡眠态):进程被阻塞,等待某些条件的完成。一旦完成这些条件,内核就会将该进程的状态设置为运行态。
(3)task_uninterruptible(不可中断睡眠态):进程被阻塞,等待某些条件的完成。与可中断睡眠态不同的是,该状态进程不可被信号唤醒。
(4)task_zombie(僵死态):该进程已经结束,但是其父进程还没有将其回收。
(5)task_stop(终止态):进程停止执行。通常进程在收到sigstop、sigttin、sigttou等信号的时候会进入该状态。
3.Linux中进程的生命周期和它们涉及的调用:
(1)父进程调用fork() 产生一个新的自进程;
(2)子进程调用exec() 指定自己要执行的代码;
(3)子进程调用exit() 退出,进入zombie状态;
(4)父进程调用wait(),等待子进程的返回,回收其所有资源
二.进程管理process
1.静态查看进程 ps
ps指令的意思
precess status的缩写
中文释义为过程状态
我们以一个进程为例
如·下图·
这里我们主要讲解的是箭头所指的三行
ps aux的功能是打印出所有进程
USER: 运行进程的用户 root
PID: 进程ID 2
%CPU: CPU占用率2.0
%MEM: 内存占用率0.5
VSZ: 占用虚拟内存128372
RSS: 占用实际内存4992
TTY: 进程运行的终端 ?
STAT: 进程状态Ss
[常见]
R 运行
S 睡眠 Sleep
T 停止的进程
Z 僵尸进程
X 死掉的进程
START: 进程的启动时间17:41
TIME: 进程占用CPU的总时间0:00分钟:秒
COMMAND: 进程文件,进程名 kehreadd
进程的父子关系
ps -ef
查看当前所有进程的意思
观察pid与ppid的区别
pid代表的是它本身的编号
ppid代表的是它父系进程的编号
例如kworker/0:0H的父系进程就是kthreadd
进程的排序
以CPU占比降序排列(减号是降序)
[[email protected] ~]# ps aux --sort -%cpu
[[email protected] ~]# ps aux --sort %cpu
sort就代表对文件文本的排序
自定义显示字段
ps axo代表只显示所需求的
下图就只显示用户,进程ID,进程名
2.动态查看进程top
如下图使用top命令
其中又可细分为两个部分
第一部分的第一行
19:35:23 当前时间
up 1:53 系统运行时间,格式为时:分
3 user 当前登录用户数
load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
第二,三行
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
Tasks: 211 total 进程总数
1 running 正在运行的进程数
210 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
Cpu(s): 0.3 us 用户空间占用CPU百分比
0.3 sy 内核空间占用CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.3 id 空闲CPU百分比
0.0% wa 等待输入输出的CPU时间百分比
0.0 hi 硬件
0.0 si 软件
0.0 st 虚拟机
第四,五行
kib Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
kib Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
第二部分的含义
其中PID,USER,%CPU,%MEM上方已经做过解释,不做赘述
PR与NI将在下面单独讲解
>VIRT:virtual memory usage 虚拟内存
需要这些内存,但并没有占满。
RES:resident memory usage 常驻内存
用了多少内存
SHR:shared memory 共享内存
1、除了自身进程的共享内存,也包括其他进程的共享内存
2、共享内存大小公式:RES – SHR
top使用技巧
动态查看进程 top,像windows的任务管理器
//回车,立刻刷新。按z彩色显示,按F,通过光标设置列的顺序。
top -d 1 //每1秒刷新。
top -d 1 -p 10126 查看指定进程的动态信息
top -d 1 -p 10126,1 查看10126和1号进程
3.使用kill进程结束程序
信号种类
给进程发送信号(kill -l列出所有支持的信号)
1) SIGHUP 重新加载配置
2) SIGINT 键盘中断Ctrl+C
3) SIGQUIT 键盘退出Ctrl+\,类似SIGINT
9) SIGKILL 强制终止,无条件
15) SIGTERM 终止(正常结束),缺省信号
18) SIGCONT 继续
19) SIGSTOP 暂停
20)SIGTSTP 键盘暂停Ctrl+Z
仅列举出常用的信息
案例
创建两个文件file01与file02
通过vim打开他们
分别观看使用kill -9(SIGKILL) file01的进程号
与kill -15(SIGTERM)file02的进程号区别
如下图
首先查看他们的进程号
先killfile01
然后kill file02
结果是两个程序一个正常结束,一个强制结束。
4.进程优先级nice
系统中每个进程都有设定的优先级,也叫nice值,能够从-20(最高优先级)到19(最低优先级)。在没有明确指定的情况下,每个进程的缺省优先级都是0(基本级)。高优先级的进程(比较低的nice值,直到-20)比其他的低优先级的进程(比较高的nice值)在CPU周期的配给上受到较多的眷顾,从而他们会得到更多的处理器周期。普通用户只能在0到19之间的值为他们的进程定级;root能够为他的任意进程配置任意级别。
在top中显示的优先级有两个,PR值和nice值
NI: 实际nice值
PR(+20): 将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39
nice 值越大: 表示优先级越低,例如+19
nice 值越小: 表示优先级越高,例如-20
可以通过指令查看优先级
ps axo pid,nice --sort=-nice
启动进程时,通常会继承父进程的 nice级别,默认为0。
实例
新建一个sleep 4000程序
使用top -p 4649(进程号) -d 1
查看进程的优先级
可以看到PR为20
NI为0
修改优先级
使用renice -10 4649(程序进程id)
或 nice -n -10 4649
以下仅作了解
作业控制jobs
jobs
作业控制是一个命令行功能,也叫后台运行。
foregroundfg
前台进程:是在终端中运行的命令,占领终端。
backgroundbg
后台进程:没有控制终端,它不需要终端的交互。看不见,但是在运行。
1.观察占领前台的现象
当前终端无法输入。观察占领前台的现象。
大部分命令行输入已经无效。
ctrl + c 终止进程
2.运行后台程序
3.查询后台运行的程序
4.使用jobs查看运行状态
5.调动后台程序至前台
6.再将程序调回去并开始
7.最后消灭进程
虚拟文件系统 proc
简介:虚拟文件系统:采集服务器自身 内核、进程运行的状态信息
*CPU
/proc/cpuinfo
cat /proc/cpuinfo
内存
/proc/meminfo
less /proc/meminfo
内核
/proc/cmdline
cat /proc/cmdline*