Linux进程管理

Linux进程管理

程序与进程

程序(program是一个普通文件,是为了完成特定任务而准备好的指令序列与数 据的集合,这些指令和数据以“可执行映像”的格式保存在磁盘中。

进程(process是一个已经开始执行但还没终止的程序实例。Linux系统下使用ps 命令可以查看到当前正在执行的进程。每个进程包含有进程运行环境、内存地址空 间、进程ID、和至少一个被称为线程的执行控制流等资源。同一个程序可以实例化为 多个进程实体。

进程和程序的区别

  • 程序是静态的,它只是一组指令的集合,不具有任何的运行意义。而进程是程序运行的动态过程。
  • 进程和程序并不是一一对应的关系,相同的程序运行在不同的数据集上就是不同的进程。
  • 进程还具有并发性和交往行,而程序确实封闭的。

进程和线程

进程是程序的一次动态执行,它对应着从代码加载、执行至执行完毕的一个完整的过 程,是一个动态实体,它有自己的声明周期。进程因创建而产生,因调度而运行,因 等待资源或事件而被处于等待状态,因完成任务而被撤销。

线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运 行的基本单位。一个线程可以创建和撤销另一个线程,同一个进程的多个线程之间可 以并发执行。

###进程与线程的关系

  • 一个进程可以拥有多个线程,而一个线程同时只能被一个进程所拥有。
  • 线程不能单独执行,但是每一个线程都有程序的入口、执行序列以及程序出口,他必须组成进程才能被执行。

父子进程

子进程是有一个进程所产生的进程,产生这个进程的进程称为父进程,在Linux系统中,使用系统调用fork创建进程。新创建的子进程几乎但不完全与父进程相同。子进程得到与父进程用户级虚拟地址相同的(但是独立的)一份副本,包括代码和数据段、堆、共享库以及用户栈。

进程状态

Linux是一个多用户多任务的操作系统,可以同时运行多个用户的多个程序,就必 然会产生多进程,而每个进程会有不同的状态。Linux的进程有以下几种状态:

​ R(运行):进程正在运行或在运行行列中等待。

​ S(终端):进程处于休眠中,当某个条件形成后或者接收到信号后,则脱离该状态。

​ D(不可中断):进程不响应系统异步信号,及使用kill命令也杀不死,

​ Z(僵死):进程已经终止,但进程描述符依然存在。

​ T(停止):进程收到停止信号后停止运行。

进程的优先级

Linux是一个多用户多任务的操作系统。所有的任务都放在一个队列中,操作系统根 据每个任务的优先级为每个任务分配合适的时间片(时间片是进程在处理器中执行时 间)。

在CPU执行每个任务的过程中,进程优先级决定了进程在CPU中的执行顺序。优先级 越高的进程被处理器执行的的机会越大。

进程优先级由动态优先级和静态优先级决定,根据进程的行为,内核使用启发式算法 决定开启或关闭动态优先级。可以通过nice级别直接修改进程的静态优先级,拥有越 高的静态优先级的进程会获得更长的时间片。

Linux支持的nice级别从19(最低优先 级)到-20(最高优先级),默认为0。只有root用户才能把进程的nice级别调整为 负数(让其具备较高优先级)。

守护进程

在某些用户空间中,即使用户退出登录,仍然会有一些后台进程在运行,这些进程被 称为守护进程

守护进程有三个最基本的特点:后台运行独立于终端完成一定的任务

首先所谓的后台运行过程是一般是在图形界面或是终端不可见的;而独立于终端是说 它不和终端联系,运行之后一般不接受终端的输入也不向终端输出;而完成一点的任 务是每一个守护进程的运行都是为了完成一定的任务而运行的,这些任务一般都是系 统相关的任务。

Linux进程管理工具

pstree命令

用于查看进程树之间的关系,可以看到父子进程的关系

-A:各进程树之间的连接以ASCII码字符来连接。

-U:各进程树之间的连接以utf8字符来连接,某些终端可能会有错误

-p:同时列出各个进程的PID

-u:同时列出各个进程的所属账号名称。
在这里插入图片描述

ps命令

-A:所有的进程均显示出来,与-e具有同样效果

-a :显示现行终端机下的所有进程,包括其他用户的进程

-u:以用户为主的进程状态

-x:通常与a一起使用,可列出较完整信息

-l:较长较详细的将该pid的信息列出

-f:做一个更完整的输出

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.2 193808  5840 ?        Ss   02:08   0:03 /usr/lib/systemd/systemd --switched-root --system --deserialize 22

USER:该进程属于哪个使用者账号。

PID:该进程的进程ID号。

%CPU:该进程所占用CPU百分比。

%MEM:该进程所占用的物理内存百分比。

VSZ :该进程使用掉的虚拟内存量。

RSS:该进程占用的固定的内存量。

TTY:该进程是在哪个终端机上面运作,若与终端机无关,则显示?。另外,tty1-tty6是本机上面的登入者程序,若为pts/0等等,贼表示为由网络连接进主机的程序。

==STAT:==该程序目前的状态,主要的状态有:

​ R(运行):进程正在运行或在运行行列中等待。

​ S(终端):进程处于休眠中,当某个条件形成后或者接收到信号后,则脱离该状态。

​ D(不可中断):进程不响应系统异步信号,及使用kill命令也杀不死,

​ Z(僵死):进程已经终止,但进程描述符依然存在。

​ T(停止):进程收到停止信号后停止运行。

START:该进程被触发启动的时间。

TIME:该进程实际使用CPU运作的时间。

COMMAND:该进程的实际指令。

pgrep命令

经常要查看进程的信息,包括进程是否已经消亡,通过pgrep来获得正在被调度的进程的相关信息。pgrep通过匹配其程序名,找到匹配的进程。

-l:同时显示进程名及pid

-o:当匹配进程时,显示进程号最小的那个

-n:当匹配进程时,显示进程号最大的那个

killall命令

killall命令用于杀死指定名字的进程。(可以直接全部杀死)

-e:要求匹配进程名称

pkill命令

pkill 进程名称 :终止进程

kill命令

kill命令用来终止指定的进程的运行,kill命令是通过向进程发送指定的信号来结束相应的进程。默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程需要用编号为9的kill信号,强行终止该进程。

kill [选项] [进程ID]

-l:列出全部的信号名称

-a;当处理当前进程时,不限制命令名和进程号的对应关系

-p:指定kill命令只打印相关进程的进程号,而不发送任何信号

-s:指定发送信号

-u:指定用户

kill -0 进程 ID :可以判断进程是否存在,如果存在,可以通过 $?拿到值为 0,否则值为 1

top命令

动态查看进程

image-20220807144020603

op命令执行结果的前5行为系统整体的统计信息,其代表含义如下:

​ 第一行:系统时间、运行时间、登陆终端数、系统负载(3个数值分别为1分钟、5分钟、15分钟内的平均值,数值越小意味着负载越低)。

​ 第二行:进程总数、运行中的进程数、睡眠中的进程数、停止的进程数、僵死的进程数。

​ 第三行:用户占用资源百分比、系统内核占用资源百分比、改变过优先级的进程资源百分比、空闲的资源百分比等。其中数据均为CPU数据并以百分比格式显示,“100.0 id”意味着由有100%的CPU处理器资源处于空闲。

​ 第四行:物理内存总量、内存空闲量、内存使用量、作为内核缓存的内存量。

​ 第五行:虚拟内存总量、虚拟内存空闲量、虚拟内存使用量、已被提前加载的内存量。

PID:进程id。

USER:进程所有者。

RP:进程优先级。

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

VIPI:进程使用的虚拟内存总量,单位kb。

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

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

S:进程状态。

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

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

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

COMMAND:进程名称(命令名/命令行)。

top常用选项

  1. -d 秒数 ,指定经过多长时间更新
  2. -i 不显示任何闲置或者僵死进程。
  3. -p 通过指定监控进程id来仅仅监控某个进程的状态

交互操作

在查看动态进程信息时,输入以下内容:

  1. P 以CPU使用率排序,默认下是此项。
  2. M 以内存的使用率排序。
  3. N 以PID排序。
  4. q 退出top
  5. u 然后输入用户名,就可以查看该用户下的进程。
  6. k 然后输入要结束的进程pid,(然后输入9就会强制结束 )就可以结束该进程。

htop命令

也是实时监控进程动态界面,如下:

在这里插入图片描述

上左区域:显示了CPU、物理内存、和交换分区的信息;

上右区域:显示了任务数量、平均负载和连接运行时间等信息;

进程区域:显示当前系统的所有进程

PID:进程id。

USER:进程所有者。

RP:进程优先级。

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

VIPI:进程使用的虚拟内存总量,单位kb。

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

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

S:进程状态。

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

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

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

COMMAND:进程名称(命令名/命令行)

F1:显示帮助信息;F2:配置界面的显示信息;F3:搜索进程;F4:过滤器;F5:以树形方式显示;F6:排序方法 ;F7,F8:调整进程nice值;F9:杀死进程;F10:退出htop

vmstat命令

常见的监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况。

[root@Qi2 ~]# vmstat 2 3     # 2代表2秒采集一次,3表示采集三次
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0   7944  68128     36 1105052    0    0     7     7   24   30  0  0 100  0  0
 0  0   7944  68104     36 1105052    0    0     0     0   54   77  0  0 100  0  0
 0  1   7944  68104     36 1105052    0    0     0     0   47   72  0  0 100  0  0

字段含义:

Process:

  • r:等待执行的任务数
  • B:等待IO的进程数量

Memory:

  • swpd:正在使用虚拟的内存大小,单位k
  • free:空闲的内存大小
  • buff:已用的buff大小,对块设备的读写进行缓冲
  • cache:已用的cache大小,文件系统的cache
  • nact:非活跃内存的大小
  • active:活跃的内存大小

Swap:

  • si:每秒从交换区写入内存的大小
  • so:每秒从内存写到交换区的大小

IO:

  • bi:每秒读取的块数
  • bo:每秒写入的块数

System:

  • in:每秒中断数,包括时钟中断
  • cs:每秒上下文切换数

CPU;

  • Us:用户进程执行消耗cpu的时间
  • Sy:系统进程消耗cpu的时间
  • id:空闲时间(包括IO等待时间)
  • wa:等待IO时间

lsof命令

lsof是一个列出当前系统打开文件的工具。

[root@Qi2 ~]# lsof | head -n 3
COMMAND     PID  TID           USER   FD      TYPE             DEVICE  SIZE/OFF       NODE NAME
systemd       1                root  cwd       DIR                8,3       224         64 /
systemd       1                root  rtd       DIR                8,3       224         64 /

COMMAND:进程名称

PID:进程标识符

USER:进程所有者

FD:文件描述符,应用程序通过文件描述符识别该文件

TYPE:文件类型

DEVICE:指定磁盘的名称

SIZE:文件的大小

NODE:索引节点

NAME:打开文件的确切名称

语法 lsof [options] filename

-p:列出某个进程号所打开的文件

+d:显示目录下被进程打开的文件

-c:显示以什么开头的进程所打开的文件

-d:显示使用某个fd的进程

-i:显示符合条件的进程情况(lsof -i :port 过滤端口占用的进程)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值