007-Linux进程管理

文章目录

前言

一、进程基本概念

1.1、概念

1.2、进程状态

二、Linux进程管理

2.1、ps:静态查看进程信息

2.1.1、查看进程信息

2.1.2、进程排序

2.1.3、查看进程的父子关系

2.1.4、自定义显示字段

2.2、top:动态查看进程信息

2.2.1、查看进程信息

2.2.1.1、系统整体的统计信息

2.2.1.2、进程信息

2.2.2、top命令常用参数

2.2.3、更改显示内容

2.2.4、top的交互命令

2.3、kill:使用信号控制进程

2.3.1、列出支持的所有信号

2.3.2、常用的控制信号

2.3.2.1、kill -9 PID:强制终止进程

2.3.2.2、kill -19 PID:暂停进程

2.3.2.3、kill -18 PID:继续进程

2.3.2.4、kill -15 PID:终止(正常结束)进程

三、进程优先级管理

3.1、进程优先级范围

3.2、进程优先级特征

3.3、nice:启动具有不同优先级的进程

3.4、renice:修改现有进程的优先级

总结


前言

提示:这里可以添加本文要记录的大概内容:


一、进程基本概念

1.1、概念

程序的一个执行实例,正在执行的程序等。

担当分配系统资源(CPU时间、内存)的实体。

1.2、进程状态

NameFlagKernel-defined state name and description
RunningR

TASK_RUNNING:     The process is either running on CPU or waiting in a run queue to get     scheduled.

TASK_RUNNING:进程要么在CPU上运行,要么在运行队列中等待调度。

SleepingS

TASK_INTERRUPTIBLE:     The process is sleeping, waiting for some event to occur. The process is     open to be interrupted by signals. Once signalled or awoken by explicit     wake-up call, the process transitions to TASK_RUNNING.

TASK_INTERRUPTIBLE:进程处于睡眠状态,等待某个事件发生。该过程是开放的,可以通过信号中断。一旦发出信号或被显式唤醒调用唤醒,进程将转换到TASK_RUNNING。

D

TASK_UNINTERRUPTIBLE:     The process state is similar to TASK_INTERRUPTIBLE except that in this state it does not process signals.     It may not be desirable even to interrupt the process while in this state     since it may be in the middle of completing some important task. When the event occurs that it is waiting for, the process is awaken by the explicit  wake-up call.

TASK_UNINTERRUPTIBLE:进程状态类似于TASK_INTERRUPTIBLE,只是在这个状态下它不处理信号。在这种状态下中断进程可能是不可取的,因为它可能正在完成一些重要的任务。当它正在等待的事件发生时,进程将被显式唤醒调用唤醒。

K

TASK_KILLABLE:The process is sleeping killably.It works like TASK_UNINTERRUPTIBLE with the bonus that it can respond to fatal signals.TASK_UNINTERRUPTIBLE + TASK_WAKEKILL = TASK_KILLABLE

TASK_KILLABLE:进程处于休眠状态。它的工作原理类似于TASK_UNINTERRUPTIBLE,只不过它可以响应致命信号。Task_uninterruptible + task_wakekill = task_killable

StoppedT

TASK_STOPPED:     The process execution is stopped, it's not running, and not able to run.     On receipt of signals like SIGSTOP, SIGTSTP, and so on, the process arrives at this state. The     process would be runnable again on receipt of signal SIGCONT.

TASK_STOPPED:进程执行停止,它没有运行,不能运行。在接收到SIGSTOP、SIGTSTP等信号时,进程到达此状态。在接收到信号SIGCONT时,进程将再次可运行。

T

TASK_TRACED:     A process arrives at this state while it is being monitored by other     processes such as debuggers.

task_tracked:进程在被其他进程(如调试器)监视时到达此状态。

ZombieZ

EXIT_ZOMBIE:     The process has terminated. It is lingering around just for its parent to     collect some statistical information about it.

EXIT_ZOMBIE:进程已经终止。它只是为了让它的父母收集一些关于它的统计信息而徘徊。

X

EXIT_DEAD:     The final state (just like it sounds). The process reaches this state when     it is being removed from the system since its parent has just collected     all statistical information by issuing the wait4() or waitpid() system call.

EXIT_DEAD:最终状态(就像它听起来一样)。当进程从系统中移除时,它就会达到这个状态,因为它的父进程刚刚通过发出wait4()或waitpid()系统调用收集了所有的统计信息。

二、Linux进程管理

2.1、ps:静态查看进程信息

2.1.1、查看进程信息

ps aux | head -2

参数含义:

a:显示现行终端机下的所有进程

u:以用户为主的格式来显示程序状况

x:不以终端机来区分

输出字段的含义:

USER:运行进程的用户

PID:进程ID

%CPU:CPU占用率

%MEM:内存占用率

VSZ:占用虚拟内存

RSS:占用实际内存

TTY:进程运行的终端

STAT:进程状态

START:进程的启动时间

TIME:进程占用CPU的总时间

COMMAND:进程文件,进程名

2.1.2、进程排序

ps aux --sort -%cpu | head -10

参数含义:

--sort:排序

-%cpu:-表示降序,cpu表示按CPU占有率排序

2.1.3、查看进程的父子关系

ps -ef | head -10

2.1.4、自定义显示字段

ps axo user,pid,%cpu,%mem | head -10

2.2、top:动态查看进程信息

2.2.1、查看进程信息

top

top输出内容一共包括两部分:

第一部分:前5行,系统整体的统计信息;

第二部分:第8行开始,系统进程信息。

2.2.1.1、系统整体的统计信息

第一行:

top - 16:20:38 up 12 days, 5:24, 2 users, load average: 0.04, 0.03, 0.05

top:当前时间 16:20:38

up:机器运行了多长时间 12 days, 5:24

users:当前登录用户数 2

load average:系统负载 0.04, 0.03, 0.05,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。

第二行:

Tasks: 127 total, 1 running, 126 sleeping, 0 stopped, 0 zombie

total:当前有多少进程 127

running:正在运行的进程数 1

sleeping:正在休眠的进程数 126

stopped:停止的进程数 0

zombie:僵尸进程数 0

第三行:

%Cpu(s): 0.3 us, 0.7 sy, 0.0 ni, 99.0 id, 0.0 wa, 0.0 hi, 0.0si, 0.0 st

us:用户空间占CPU的百分比(像shell程序、各种语言的编译器、各种应用、web服务器和各种桌面应用都算是运行在用户地址空间的进程,这些程序如果不是处于idle状态,那么绝大多数的CPU时间都是运行在用户态)

sy: 内核空间占CPU的百分比(所有进程要使用的系统资源都是由Linux内核处理的,对于操作系统的设计来说,消耗在内核态的时间应该是越少越好,在实践中有一类典型的情况会使sy变大,那就是大量的IO操作,因此在调查IO相关的问题时需要着重关注它)

ni:用户进程空间改变过优先级(ni是nice的缩写,可以通过nice值调整进程用户态的优先级,这里显示的ni表示调整过nice值的进程消耗掉的CPU时间,如果系统中没有进程被调整过nice值,那么ni就显示为0)

id: 空闲CPU占用率

wa: 等待输入输出的CPU时间百分比(和CPU的处理速度相比,磁盘IO操作是非常慢的,有很多这样的操作,比如,CPU在启动一个磁盘读写操作后,需要等待磁盘读写操作的结果。在磁盘读写操作完成前,CPU只能处于空闲状态。Linux系统在计算系统平均负载时会把CPU等待IO操作的时间也计算进去,所以在我们看到系统平均负载过高时,可以通过wa来判断系统的性能瓶颈是不是过多的IO操作造成的)

hi: 硬中断占用百分比(硬中断是硬盘、网卡等硬件设备发送给CPU的中断消息,当CPU收到中断消息后需要进行适当的处理(消耗CPU时间)。)

si:软中断占用百分比(软中断是由程序发出的中断,最终也会执行相应的处理程序,消耗CPU时间)

st:steal time

第四行:

KiB Mem : 1863012 total, 1286408 free, 216532 used, 360072 buff/cache

total:物理内存总量

free:空闲内存量

used:使用的内存量

buffer/cache:用作内核缓存的内存量

第五行

KiB Swap: 5242876 total, 7999484 free, 0 used. 1468240 avail Mem

total:交换区内存总量

free:空闲交换区总量

used:使用的交换区总量

buffer/cache:缓冲的交换区总量

2.2.1.2、进程信息

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

21829 root 20 0 0 0 0 S 0.7 0.6 129:53.91 java

22559 root 20 0 158920 5628 4268 S 0.3 9.2 139:42.81 java

22598 root 20 0 162112 2208 1540 S 0.3 0.1 0:04.68 fluentd

拿第1个进程举例:

PID:进程id 21829

USER:进程所有者的用户名 root

PR:优先级 20

NI:nice值 0,负值表示高优先级,正值表示低优先级

VIRT:进程使用的虚拟内存总量 0,单位kb。VIRT=SWAP+RES

RES:进程使用的、未被换出的物理内存大小 0,单位kb。RES=CODE+DATA

SHR:共享内存大小 0,单位kb

S:进程状态 S。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

%CPU:上次更新到现在的CPU时间占用百分比 0.7

%MEM:进程使用的物理内存百分比 0.6

TIME+:进程使用的CPU时间总计 129:53.91,单位1/100秒

COMMAND:命令名/命令行 java

还有一些其他比较重要的字段

PPID:父进程id

GROUP:进程所有者的组名

SWAP: 进程使用的虚拟内存中被换出的大小

CODE:可执行代码占用的物理内存大小,单位kb

DATA:可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb

nFLT:页面错误次数

nDRT:最后一次写入到现在,被修改过的页面数。

WCHAN:若该进程在睡眠,则显示睡眠中的系统函数名

Flags:任务标志

2.2.2、top命令常用参数

-d 指定每两次屏幕信息刷新之间的时间间隔,如希望每秒刷新一次,则使用:top -d 1


-p 通过指定PID来仅仅监控某个进程的状态

-S 指定累计模式

-s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险

-i 使top不显示任何闲置或者僵死的进程

-c 显示整个命令行而不只是显示命令名

例如:

每隔2秒显示pid是69358的进程的资源使用情况,并显式该进程启动的命令行参数

top -d 2 -c -p 69358

2.2.3、更改显示内容

通过按 f 键可以编辑显示内容,按f键后,会出现下图:

可以通过上、下键来选择

按右键可以选择列,然后按上、下键来移动列的显示位置,前移或后移,按回车确定

按空格键来显示或隐藏该列,带*的是显示,不带*的是不显示

按s键可以将当前列设置为排序列。第一行提示排序字段:当前是按照%CPU这一列来排序的

按q键退出

2.2.4、top的交互命令

【1】敲top后,按键盘数字“1”可以监控每个逻辑CPU的状况:

【2】敲top后,输入u,然后输入用户名,则可以查看相应的用户进程;

【3】敲top后,top命令默认以K为单位显示内存大小,我们可以通过大写字母E来切换内存信息区域的显示单位,如下按一下E切换到MB

再按一下E切换到GB:

【4】敲top后,输入h进入top命令的帮助文档,了解更多关于top的用法。

2.3、kill:使用信号控制进程

2.3.1、列出支持的所有信号

kill -l

2.3.2、常用的控制信号

编号        信号名        作用

1)        SIGHUP        重新加载配置

2)        SIGINT        键盘中断Ctr+C

3)        SIGQUIT         键盘退出Ctrl+\,类似SIGINT

9)        SIGKILL        强制终止、无条件

15)        SIGTERM        终止(正常结束),缺省信号
18)        SIGCONT        继续
19)        SIGSTOP        暂停
20)        SIGTSTP        键盘暂停Ctrl+Z

我在这里写了一个脚本,每1秒输出一句进程正在执行,可以看一下不同信号下,这个脚本进程的状态。

执行脚本,正常执行中

bash test_kill

2.3.2.1、kill -9 PID:强制终止进程

终止 bash test_kill 进程

kill -9 233095

2.3.2.2、kill -19 PID:暂停进程
kill -19 233112

2.3.2.3、kill -18 PID:继续进程
kill -19 233112

可以看到进程又开始执行了

2.3.2.4、kill -15 PID:终止(正常结束)进程

可以看到进程正常终止 Terminated

三、进程优先级管理

3.1、进程优先级范围

这里借用了Sure云小硕的一张图片:进程优先级范围,大家也可以看看他的文章,写的不错:Linux进程管理进程优先级nice

优先级分为系统优先级:PR 和 nice优先级:NI。

如图优先级范围:

黄色部分是nice优先级,范围是:-20~19,这个范围是我们能更改的;

黑色部分是系统优先级,范围是:-∞~39,这个是我们无法更改的;

进程的nice优先级要加上20才是进程在系统中的优先级(为了防止我们更改的一些nice优先级超过系统进程的优先级导致系统的错误)。

3.2、进程优先级特征

nice值越大:表示优先级越低,例如19;
nice值越小:表示优先级越高,例如-20。

3.3、nice:启动具有不同优先级的进程

这里拿 sleep 100这个进程举例,设置他的nice优先级为-10:

-n        设置nice值

-10        nice值为-10

sleep 100        进程

&        把进程放到后台运行

nice -n -10 sleep 100 &

3.4、renice:修改现有进程的优先级

renice -n -20 -p 233456

-n -20        设置nice值为-20

-p 233456        进程id为233456

总结

本文内容:

进程相关概念;

工作中常用到的进程管理的命令ps、top、kill;

进程优先级的概念及修改优先级的命令。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

于齐龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值