Linux下的进程管理

在操作系统系统中,进程是一个非常重要的概念。

一、Linux中进程的相关知识

1、什么是进程呢?

通俗的来说进程是运行起来的程序。唯一标示进程的是进程描述符(PID),在linux内核中是通过task_struck和task_list来定义和管理进程的。

2、进程的分类

1)根据在linux不同模式下运行分为:

核心态:这类进程运行在内核模式下,执行一些内核指令(Ring 0)。

用户态:这类进程工作在用户模式下,执行用户指令(Ring 3)。

如果用户态的进程要执行一些核心态的指令,此时就会产生系统调用,系统调用会请求内核指令完成相关的请求,就执行的结果返回给用户态进程。

2)按照进程的状态可分为:

运行态:running 正在运行的进程

可中断睡眠态:进程处于睡眠状态,但是可以被中断

不可中断的睡眠态:进程处于睡眠状态,但是不可以被中断

停止态:stoped 不会被内核调度

僵死态:zombie产生的原因是进程结束后,它的父进程没有wait它,所导致的。

3)按照操作的密集程度

CPU密集型:进程在运行时,占用CPU时间较多的进程。

I/O密集型:进程在运行时,占用I/O时间较多的进程。

通常情况下,I/O密集型的优先级要高于CPU密集型。

4)按照进程的处理方式

批处理进程:

交互式进程:

实时进程:

3、进程的优先级

进程的有优先级,是用0-139数字来表示的,数字优先级从小到大依次是:0-99,139-100。

优先级分为2类:

实时优先级:0-99,是由内核维护的

静态优先级:100-139,可以使用nice来调整,nice值的取值范围是[-20,19),分别对应100到139。nice默认值是0。

动态优先级:由内核动态维护,动态调整。

二、进程的管理工具

1、pstree命令 查看进程数。 常用用法如下:

Linux下的进程管理

2、ps 命令 查看进程的相关状态。支持SysV和BSD两种风格的选项。

常用选型:

a 与终端相关的进程

x 与终端无关的进程

u 显示运行进程的用户

常用组合选项:ps aux

Linux下的进程管理

-e 显示所有进程

-f 显示完成格式信息

常组合在一起使用:ps -ef

Linux下的进程管理

但是有些这种情况下,我们的命令有时候显示不完整

Linux下的进程管理

此时想要显示完成就要 ps -efww

Linux下的进程管理

-F:显示额外信息

-H:显示进程的层次结构

常用组合方式:ps -eFH

Linux下的进程管理

可能以后我们用到最多的选项:

-o 我们可以自定义显示字段

Linux下的进程管理

3、pgrep,pidof

pgrep 常用选型:

-U 查看指定用户的进程号

-G 查看指定用户组的进程号

-l 显示进程名和进程号

Linux下的进程管理

pidof:只显示已启动进程的PID

实时监控系统资源

Linux下的进程管理

常用选项:

-d #: 指定刷新时间间隔

-b: 以批次的方式显示top的刷新

-n #: 显示的批次

例如:top -d 4 -b 2 -n 3

4、htop

htop命令是top命令的升级版,无论是在功能上还是在界面显示上,都比top命令更胜一筹。

u: 交互式选择显示指定用户的进程

l: 显示光标所在进程所打开的文件列表

s: 显示光标所在进程执行的系统调用

a: 绑定进程到指定的CPU

#:快速定位光标至PID为#的进程上

下图是htop的界面。这个工具比较强大,用法功能比较多,在这里先做简单介绍。以后笔者会专门写htop的博客。

Linux下的进程管理

5、vmstat

wmstat 查看虚拟使用情况

6、nice,renice

调整进程的优先级。

nice 在进程启动的时候设置优先级。

renice 重新设置已启动进程的优先级。

7、kill,killall

对于有Linux C编程经验的人来说,我们知道IPC通信方式之一就是通过信号量(signal),那么对于kill和killall命令来说,它们与信号量有着很大的关系,或者说kill,killall命令通过信号量让我们可以手动的向进程传递信号来控制进程。

常见的信号量如下:

8、jobs,bg,fg

什么是作业呢?作业就是许多进程一起协同完成一项具体的工作。作业有前台作业和后台作业2种。

使用 & 或者 ctrl + Z可以把一个进程打入后台。

9、dstat命令,查看各种状态信息

用法:dstat [-afv] [options..] [delay [count]]

常用参数 具体意义
-c 显示cpu统计数据,如有多个CPU汇总统计
-d 显示disk统计数据,如有多块磁盘则汇总统计
-D DEVICE 显示特定磁盘的信息
-g 显示page信息(具体什么是page以及他的作用,会在以后内存调优博客中具体说明)
-i 显示中断的统计数据
-m 显示内存的统计信息
-l 显示系统的负载信息
-n 显示网络接口的相关属性
-s 显示系统属性
-N INTER_FACE_NAME 显示特定接口的属性
-s 显示交换内存的属性
-p 显示进程队列
--ipc 显示ipc消息队列、信号量和共享内存的使用状况
-a 等价于 -cdngy 显示CPU,磁盘,网卡,page,系统属性
-f 以完整格式显示所有信息,
--tcp,--udp 显示tcp,udp状态信息

更多参数查看 man 手册。

示例:

Linux下的进程管理

10、查看内存映射

pmap PID 查看对应进程的内存映射,常用的用法是:pman `pidof PROCESS_NAME`。当然这些信息也可以查看 /proc/PID/pmap 文件查看。

Linux下的进程管理

11、glances命令

一款强大的系统监控工具:能实时监控像cpu,meomory,load,swap,Network,mount,disk等信息。

Linux下的进程管理

相关推荐