Linux进程管理

进程管理

一、进程的基本简介

1.1程序、进程与线程
1.1.1简介

程序:是一组指令及参数的集合,按照既定的逻辑控制计算机运行来完成特定的任务。

进程:是运行着的程序,是操作系统执行的基本单位,是程序运行的过程、动态、有生命周期及运行状态。进程的生命周期:因创建而产生、因调度而运行、因等待资源或事件而处于等待状态,因完成任务而被撤销。

线程:是进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位,一个线程可以创建和撤销另一个线程。

1.2三者之间的联系与区别
1.2.1程序与进程
  • 一个运行的程序至少有一个进程,一个进程至少有一个线程。
  • 程序与进程是一对多的关系,程序在不同的数据集上运行就成为不同的进程。
  • 进程具有并发性和交往性,程序具有封闭性。
  • 进程反应了一个程序在一定的数据集上运行的全部动态过程。
1.2.2线程和进程
  • 一个进程至少有一个线程。
  • 线程不能单独运行,但每一个线程都有程序的入口、执行序列以及程序的出口,它必须组成进程才能被执行。
1.3父进程和子进程

父进程:在计算机领域,父进程(英语:Parent Process)指已创建一个或多个子进程的进程。

子进程:在计算机领域中,子进程为由另外一个进程(对应称之为父进程)所创建的进程。

1.3.1两者之间的关系
  • 一个进程可能下属多个子进程,但最多只能有1个父进程。
  • 若某一进程没有父进程,则可知该进程很可能由内核直接生成。
  • 进程ID为1的进程是在系统引导阶段由内核直接创建的,且不会在系统运行过程中终止执行。
  • 在父进程被杀死之后子进程也会随之被杀死。
  • 子进程会继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量、以及程序代码。

二、进程前后台与状态

2.1前台进程和后台进程
2.1.1简介

前台进程:是在终端中运行的命令,那么该终端就为进程的控制终端,一旦这个终端关闭,这个进程也随之消失。

后台进程:也叫守护进程(Daemon),是运行在后台的一种特殊进程,不受终端控制,它不需要终端的交互;Linux的大多数服务器就是使用守护进程实现的。比如Web服务器的httpd等。

2.2进程状态

进程状态:由操作系统定义,并由操作系统所操控的一个特殊的数据结构实例叫做进程。它连接了用户代码,拥有代码运行所需的独立内存空间,在调度器的调度下使用分配给它的处理器时间片来运行。

状态名状态意义
R可执行状态
S可中断睡眠状态
D不可中断的睡眠状态
T暂停状态
t跟踪状态
Z退出状态(僵尸状态)
X退出状态,进程即将被销毁
2.3进程优先级
2.3.1Linux进程调度及多任务

每个cpu(或cpu核心)在一个时间点上只能处理一个进程,通过时间片技术,Linux实际能够运行的进程和线程数可以超出实际可用的cpu及核心数量。Linux内核进程调度程序将多个进程在cpu核上快速切换,从而给用户多个进程在同时运行的印象。

2.3.2相对优先级nice

因为不是每个进程都与其他进程同样重要,可告知进程调度程序为不同进程使用不同的调度策略。常规系统上的大多数进程所使用的调度策略SCHED_OTHER(也称为SCHED_NORMAL),但还要其他的一些调度策略用于不同的目的。SCHED_OTIME调度策略运行的进程的相对优先级为进程的nice之,可以有四十多种不同的nice值级别。(从-20到19)

nice值越高:表示优先级越低,如+19表示该进程容易将cpu使用量让给其他进程。

nice值越低:表示优先级越高,如-20,该进程不倾向让出cpu。

2.4查看进程的nice级别
2.4.1使用top查看nice级别

NI:实际nice级别

PR:将nice级别显示为映射到更大优先级队列,-20映射到0,+19映射到39。

2.4.2使用ps查看nice级别

在这里插入图片描述

三、Linux进程管理工具

3.1 pstree命令
3.1.1pstree命令的作用

pstree 命令是以树形结构显示程序和进程之间的关系,可以清晰的看出那个是父进程那个是子进程。

注意:在使用 pstree 命令时,如果不指定进程的 PID 号,也不指定用户名称,则会以 systemd 进程为根进程,显示系统中所有程序和进程的信息.

[root@guowangzhongwen ~]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
        ├─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─abrt-dbus───3*[{abrt-dbus}]
        ├─2*[abrt-watch-log]
        ├─abrtd
        ├─accounts-daemon───2*[{accounts-daemon}]
        ├─alsactl
        ├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
        │                 └─3*[{at-spi-bus-laun}]
        ├─at-spi2-registr───2*[{at-spi2-registr}]
        ├─atd
        ├─auditd─┬─audispd─┬─sedispatch
        │        │         └─{audispd}
        │        └─{auditd}

注意:若指定 PID 号或用户名,则将以 PID 或指定命令为根进程,显示 PID 或用户对应的所有程序和进程。

[root@guowangzhongwen ~]# pstree 7166
gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
                │             │             ├─ibus-engine-sim───2*[{ibus-engine-sim}]
                │             │             └─2*[{ibus-daemon}]
                │             └─20*[{gnome-shell}]

3.1.2pstree命令的参数
选项含义
-A各进程数之间的连接以ASCII码字符链接
-U各进程树之间的连接以utf8字符来连接
-p同时列出每个进程的PID
-u同时列出每个进程的所属账号名称
3.1.3pstree命令的例子
  • 显示进程号为7166的所有子进程以及进程PID
[root@guowangzhongwen ~]# pstree -p 7166
gnome-session-b(7166)─┬─gnome-shell(7217)─┬─ibus-daemon(7270)─┬─ibus-dconf(7273)─┬─{ibus-dconf}(7274)
                      │                   │                   │                  ├─{ibus-dconf}(7279)
                      │                   │                   │                  └─{ibus-dconf}(7282)
                      │                   │                   ├─ibus-engine-sim(7429)─┬─{ibus-engine-sim}(7431)
                      │                   │                   │                       └─{ibus-engine-sim}(7432)
                      │                   │                   ├─{ibus-daemon}(7271)
                      │                   │                   └─{ibus-daemon}(7277)
                      │                   ├─{gnome-shell}(7220)
                      │                   ├─{gnome-shell}(7221)
                      │                   ├─{gnome-shell}(7222)
                      │                   ├─{gnome-shell}(7237)

  • 显示进程号为7166的所有子进程以及对应用户的名称
[root@guowangzhongwen ~]# pstree  7166
gnome-session-b─┬─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
                │             │             ├─ibus-engine-sim───2*[{ibus-engine-sim}]
                │             │             └─2*[{ibus-daemon}]
                │             └─20*[{gnome-shell}]
                ├─gsd-a11y-settin───3*[{gsd-a11y-settin}]
                ├─gsd-clipboard───2*[{gsd-clipboard}]
                ├─gsd-color───3*[{gsd-color}]
                ├─gsd-datetime───2*[{gsd-datetime}]

3.2 pgrep 命令
3.2.1pgrep命令的作用

根据给定的条件查找正在运行的程序的进程ID。 它可以是完整或部分的进程名称,运行该进程的用户或其他属性。

**语法格式:**pgrep [OPTIONS]

注意:当不带任何选项运行时,pgrep显示匹配所给名字的所有运行程序 PID。

[root@guowangzhongwen ~]# pgrep sshd
6720
6751
7459

3.2.2pgrep命令的参数
选项作用
-d允许你指定一个分隔符
-l显示名称和id
-f将会匹配所有的参数列表
-u显示所有给用户运行的进程
-n当匹配多个进程时显示进程号最大的那个
-o当匹配多个进程时显示进程号最小的那个
-v反向匹配
3.2.3pgrep命令的例子
  • 同时显示进程PID和进程名称
[root@guowangzhongwen ~]# pgrep -l sshd
6720 sshd
6751 sshd
7459 sshd
  • 当匹配多项进程时显示进程号最小的那个
[root@guowangzhongwen ~]# pgrep -o sshd
6720
  • 当匹配多项进程是显示进程号最大的那个
[root@guowangzhongwen ~]# pgrep -n sshd
7459
3.3ps命令
3.3.1PS命令的作用

ps全名:process status 过程状态

ps命令用于显示当前进程的状态

语法 ps 【options’】 【–help】

3.3.2ps命令的参数
选项作用
-A列出所有进程
-a显示现在终端机下的所有进程,包括其他用户进程
-u以用户为主的进程状态
-x通常与a参数一块使用可以列出较完整信息
-f做一个更完整的输出
-e列出所有进程
-i较长、较详细的将该PID的信息列出
3.3.3ps命令的例子
  • ps -aux(显示包含其他使用着的进程)
[root@guowangzhongwen ~]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 193812  6872 ?        Ss   14:38   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2  0.0  0.0      0     0 ?        S    14:38   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    14:38   0:00 [ksoftirqd/0]
root          5  0.0  0.0      0     0 ?        S<   14:38   0:00 [kworker/0:0H]
root          7  0.0  0.0      0     0 ?        S    14:38   0:00 [migration/0]
root          8  0.0  0.0      0     0 ?        S    14:38   0:00 [rcu_bh]
  • ps -ef(显示所有进程信息,连同命令行)
[root@guowangzhongwen ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 14:38 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root          2      0  0 14:38 ?        00:00:00 [kthreadd]
root          3      2  0 14:38 ?        00:00:00 [ksoftirqd/0]
root          5      2  0 14:38 ?        00:00:00 [kworker/0:0H]

3.3.4ps命令的表头信息
  • USER: 行程拥有者
  • PID: pid
  • %CPU: 占用的 CPU 使用率
  • %MEM: 占用的物理内存使用率
  • VSZ: 占用的虚拟内存大小
  • RSS: 占用的物理内存大小
  • TTY: 终端的次要装置号码 (minor device number of tty)
  • STAT: 该行程的状态:
    • D: 无法中断的休眠状态 (通常 IO 的进程)
    • R: 正在执行中
    • S: 静止状态
    • T: 暂停执行
    • Z: 不存在但暂时无法消除
    • W: 没有足够的记忆体分页可分配
    • <: 高优先序的行程
    • N: 低优先序的行程
    • L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
  • START: 行程开始时间
  • TIME: 执行的时间
  • COMMAND:所执行的指令
3.4kill命令
3.4.1kill命令的作用

**kill命令的作用:**kill 是向进程发送信号的命令。默认传递终止进程运行的信号进程。多用于终止后台进程。

3.4.2kill命令的参数

使用kill -l命令列出所有可用的信号

[root@guowangzhongwen ~]# kill -l
 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP
 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX

最长使用的信号是1、9、15

kill 1:重新加载进程

kil 9:彻底杀死进程

kill 15:完美的停止一个进程 也是kill不带参数默认的进程

参数作用
-l列出全部信号名称
-a处理当前进程时,不限制命名名和进程号的对应关系
-u指定用户
3.5pkill命令
3.5.1pkill命令的作用

pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程,除此之外,pkill 还有一个更重要的功能,即按照终端号来踢出用户登录。

参数与pgrep参数相同

3.6killall命令
3.6.1kill all命令的作用

用于杀死进程,与 kill 不同的是killall 会杀死指定名字的所有进程。kill 命令杀死指定进程 PID,需要配合 ps 使用,而 killall 直接对进程对名字进行操作,更加方便。

3.6.2killall命令的参数
选项作用
-e要求匹配进程名称
-I忽略小写
-g杀死进程组
-w等待进程死亡
3.7top命令
3.7.1top命令的作用

top命令用于实时显示 process 的动态

语法:top 【选项】

3.7.2top命令的参数
选项作用
-d秒数:指定top命令每隔几秒更新,默认是三秒
-p进程pid,仅查看指定pid的进程
-s使top命令在安全模式中运行
-u用户名,只监听某个用户的进程
3.7.3top命令的快捷键
  • ? 或 h:显示交互模式的帮助;
  • P:按照 CPU 的使用率排序,默认就是此选项;
  • M:按照内存的使用率排序;
  • N:按照 PID 排序;
  • T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  • k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  • r:按照 PID 给某个进程重设优先级(Nice)值;
  • q:退出 top 命令;
3.7.4top命令表头的含义

在这里插入图片描述

前五行信息统计:

第一行是任务列队信息

信息详解
14:43:13当前时间
up 18 min系统运行时间
3 user当前登录用户数
load average:0.01,0.02,0.05系统负载,即任务队列的平均长度。三个数值分别表示1分钟,5分钟,15分到现在的平均值

第二、三行为进程和CPU信息

信息详解
213 total进程总数为213
running正在运行的经常数
sleeping睡眠的进程数
stopped停止的进程数
zombie僵尸进程数
us用户空间占用CPU百分比
sy内核空间占用CPU百分比
ni用户进程空间内改变过优先级的进程占用CPU百分比
id空闲CPU百分比
wa等待输入输出的CPU时间百分比
hi硬中断占用CPU的百分比
si软中断占用CPU的百分比
st是当hypervisor服务另一个虚拟处理器的时候,虚拟CPU等待实际CPU的百分比

最后两行为内存信息

信息详解
totall物理内在总量
used使用的物理内存总量
free空闲内存总量
buffers用作内核缓存的内存量
total交换区总量
used使用交换区的总量
free空闲区总量
cached缓冲交换区的总量

信息区的信息

信息详解
PID进程ID
USER进程所用着用户名
PR优先级
NInice值。复制表示优先级高
VIRT进程使用虚拟内存总量
RES进程使用的未被唤出的物理内存大小
SHR共享内存大小
S进程状态
%CPUCPU的占有率
%MEM进程使用物理内存百分比
TIME+进程使用CPU的时间总计
COMMAND命令名
RES进程使用的未被唤出的物理内存大小
SHR共享内存大小
S进程状态
%CPUCPU的占有率
%MEM进程使用物理内存百分比
TIME+进程使用CPU的时间总计
COMMAND命令名
3.8htop命令
3.8.1htop命令的作用

top 类似于 top 命令,但可以让你在垂直和水平方向上滚动,所以你可以看到系统上运行的所有进程,以及他们完整的命令行。可以不用输入进程的 PID 就可以对此进程进行相关的操作 (killing, renicing)。 htop 是 Linux 系统中的一个互动的进程查看器

  • 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完整的命令行。
  • 在启动上,比top 更快。
  • 杀进程时不需要输入进程号。
  • htop 支持鼠标操作。
  • top 已经很老了。

注意:如果配置的镜像源没有epel仓库,则不能直接使用yum 直接安装htop。

3.8.2htop命令的安装
  1. 先配置镜像仓库
[root@guowangzhongwen yum.repos.d]# wget -O /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
[root@guowangzhongwen yum.repos.d]# yum clean all
[root@guowangzhongwen yum.repos.d]# yum makecache
  1. 使用yum -y install htop下载配置htop
[root@guowangzhongwen yum.repos.d]# yum install htop -y
  1. 打开htop
    在这里插入图片描述
3.8.3htop命令的参数
选项作用
-c使用单一配色方案
-d设置延迟跟新时间,单位秒
-u只显示一个给定用户的过程
-p只显示给定PID的过程
-s以此来排序(后面接排序内容)
-v显示版本信息
3.8.4htop命令的四个区

第一区域:CPU、内存、Swap的使用情况
在这里插入图片描述

第二区域:任务、线程、平均负载及系统运行时间的信息。平均负载部分提供了三个数字,这仅仅表示的是过去的5分钟、10分钟和15分钟系统的平均负载而已,在单核的系统中平均负载为1表示的是百分之百的 CPU 利用率。最后,运行时间 (uptime)标示的数字是从系统启动起到当前的运行总时间。

在这里插入图片描述

第三区域:当前系统中的所有进程。各列说明:

  • PID:进程标志号,是非零正整数
  • USER:进程所有者的用户名
  • PR:进程的优先级别
  • NI:进程的优先级别数值
  • VIRT:进程占用的虚拟内存值
  • RES:进程占用的物理内存值
  • SHR:进程使用的共享内存值
  • S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
  • %CPU:该进程占用的CPU使用率
  • %MEM:该进程占用的物理内存和总内存的百分比
  • TIME+:该进程启动后占用的总的CPU时间
  • COMMAND:进程启动的启动命令名称

在这里插入图片描述

第四区域:当前界面中F1-F10功能键中定义的快捷功能。即 底部菜单栏。
在这里插入图片描述

3.8.5htop命令的F1到F10用法
键位作用
F1查看htop使用说明
F2htop设定
F3搜索进程
F4增量进程过滤器
F5显示树形结构
F6选择排序方式
F7可减少nice值可提高对应进程的优先级
F8可增加nice值,降低进程的优先级
F9可对进程传递信号
F10结束htop
3.8.6htop命令的快捷键

M 按照 内存使用百分比 排序, 对应 MEM%列;
P 按照 CPU使用百分比 排序,对应 CPU%列;
T 按照 进程运行的时间 排序,对应TIME+列;
F 跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。

# 快速定位光标到PID所指定的进程上。
Ctrl + L 刷新

Numbers PID 查找:

L显示进程打开文件

l倒转排序顺序

3.9vmstat命令
3.9.1vmstat命令的用法

vmstat主要是用来检测虚拟内存的,可以展现给定时间间隔的服务器的状态值,包括CPU使用率,内存使用率,虚拟内存交换情况,IO读写情况等。

3.9.2vmstat命令的参数
参数作用
-v显示版本信息
-n只在开始时显示一次各字段名称
-a显示活跃和非活跃内存
-d显示各个磁盘相关统计信息
-D显示磁盘总统信息
-p显示指定磁盘分区统计信息
-s显示内存相关统计信息以及多种系统活动数量
delay刷新时间间隔
count刷新次数
3.9.3vmstat命令字段含义

在这里插入图片描述

procs区

信息含义
r等待运行的进程数
b处在非中断睡眠状态的进程数
w被交换出去可运行的进程数

Memory区

信息含义
spwd虚拟内存的使用情况
free空闲的内存
buff被用来作为缓存的内存数

swap区

信息含义
si从磁盘的交换到内存的交换页的数量
so从内存的交换到磁盘的交换页的数量

IO区

信息含义
bi发送到块设备的块数
bo从快设备接受到的块数

system区

信息含义
in每秒的中断数,包括时钟中断
cs每秒的环境切换次数

cpu区

信息含义
uscpu使用时间
sycpu系统使用时间
id闲置时间
3.10lsof命令
3.10.1lsof命令的作用

列出当前系统打开文件的工具。

lsof输出信息含义:在终端下输入lsof即可显示系统打开的文件,因为lsof需要访问核心内存的各种文件,所有必须以root的身份运行他才能充分的发挥其作用。

3.10.2lsof命令的参数
选项作用
-a列出打开文存在的进程
-c<进程名>列出指定进程所打开的文件
-g列出GID号进程详情
-d<文件号>列出占用该文件号的进程
+d<目录>列出目录下被打开的文件
+D<目录>递归列出目录下被打开的文件
-n<目录>列出使用NFC的文件
-l在输出显示用户ID而不是用户名
-i<条件>列出符合条件的进程
-p<进程号>列出指定进程号所打开的文件

|
| sy | cpu系统使用时间 |
| id | 闲置时间 |

3.10lsof命令
3.10.1lsof命令的作用

列出当前系统打开文件的工具。

lsof输出信息含义:在终端下输入lsof即可显示系统打开的文件,因为lsof需要访问核心内存的各种文件,所有必须以root的身份运行他才能充分的发挥其作用。

3.10.2lsof命令的参数
选项作用
-a列出打开文存在的进程
-c<进程名>列出指定进程所打开的文件
-g列出GID号进程详情
-d<文件号>列出占用该文件号的进程
+d<目录>列出目录下被打开的文件
+D<目录>递归列出目录下被打开的文件
-n<目录>列出使用NFC的文件
-l在输出显示用户ID而不是用户名
-i<条件>列出符合条件的进程
-p<进程号>列出指定进程号所打开的文件
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值