首页 > 系统相关 >进程管理

进程管理

时间:2024-01-24 12:56:19浏览次数:18  
标签:管理 0.0 vim 内存 进程 root CPU

一、什么是进程

进程是已启动的可执行程序的运行实例,

进程有以下组成部分:

  • 已分配内存的地址空间

  • 安全属性,包括所有权凭据和特权

  • 程序代码的一个或多个执行线程

  • 进程状态

程序: 二进制文件,静态 /bin/date,/usr/sbin/sshd

进程: 是程序运行的过程, 动态,有生命周期及运行状态。

下图所示的是进程的生命周期

image-20230727161856738

描述如下:

父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID,(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。

PID 1

  • Linux5/6:init

  • Linux7:systemd

1690446126403

在 Linux 系统中,systemd 是一个 init 系统,负责系统的初始化和管理进程的启动。它是第一个用户空间进程,因此其 PID(进程ID)通常是1。

当 Linux 系统启动时,内核首先启动 init 进程(通常是 systemd),并分配 PID 1 给它。init 进程然后负责启动其他所有进程,使系统进入完全初始化的状态。因为 systemd 是第一个用户空间进程,它的 PID 是1。

systemd 的主要作用是启动系统服务、管理进程和资源,以及处理系统的启动、关机和其他运行级别的管理任务。它取代了传统的 SysV init 系统,并在现代 Linux 发行版中广泛使用。


子进程继承父进程的安全性身份、过去和当前的文件描述符、端口和资源特权、环境变量,以及程序代码。随后,子进程可能exec自己的程序代码。通常,父进程在子进程运行期间处于睡眠(sleeping)状态。当子进程完成时发出(exit)信号请求,在退出时,子进程已经关闭或丢弃了其资源环境,剩余的部分称之为僵停(僵尸Zombie)。父进程在子进程退出时收到信号而被唤醒,清理剩余的结构,然后继续执行其自己的程序代码。

父进程通过调用 wait()waitpid() 等系统调用来处理子进程的退出状态信息,从而彻底释放子进程的资源,并将其完全回收。只有在父进程处理完子进程的退出状态后,子进程才会被彻底销毁,不再占用系统资源。

image-20230727162847240

系统核心组成:

一个完整的LINUX内核包含5部分

  • 内存管理:合理有效地管理整个系统的物理内存

  • 进程管理:控制系统进程对CPU的访问进程间通信:用于控制不同进程之间在用户空间的同步,数据共享和交换

  • 虚拟文件系统:文件系统模型屏蔽一些具体文件系统差异,可以分为:逻辑文件系统(EXT4..XFS)和设备驱动程序(为硬件写的驱动程序模块)

  • 网络接口:提供对各种网络协议的实现和各种网络硬件的支持

二、进程的属性

  • 进程ID(PID):是唯一的数值,用来区分进程

  • 父进程的ID(PPID)

  • 启动进程的用户ID(UID)和所归属的组(GID)

  • 进程状态:状态分为运行R、休眠S、僵尸Z

  • 进程执行的优先级

  • 进程所连接的终端名

  • 进程资源占用:比如占用资源大小(内存、CPU占用量)

三、进程管理工具

对于Linux进程的管理,是通过进程管理工具实现的,比如ps、kill、top.....

1、ps - 监视进程工具

默认情况下ps命令不会提供太多信息给到我们

1690447015907

在LINUX系统中使用的GUN ps命令支持3种不同类型的命令行参数:

  • Unix风格的参数,前面加单破折线

  • BSD风格的参数,前面不加破折线

  • GNU风格的参数,前面加双破折线

1.1、Unix风格

常用的参数;

-f  显示完整格式输出
-e  显示所有进程
-l  显示长列表

我们常用的组合: ps -ef

1690447193972

  • UID:启动进程的用户ID

  • PID:进程ID

  • PPID:父进程ID

  • C:进程生命周期的CPU利用率

  • STIME:进程启动时的系统时间

  • TTY:进程启动的终端设备

  • TIME:运行进程需要的累计CPU时间

  • CMD:启动的程序名称

通过ps -efl查看

1690447447321

  • F:内存分配进程的系统标记

  • S:进程的状态

  • PRI:进程的优先级(数值越大优先级越低)

  • NI:这个值用来参与决定优先级

  • ADDR:进程内存地址

  • SZ:假如进程被换出,所需要的交换空间大小

  • WCHAN:进程休眠的内核函数的地址

1.2、BSD风格

常用的参数:

-a: 显示跟当前终端关联的所有进程
-u: 基于用户的格式显示(U: 显示某用户ID所有的进程)
-x: 显示所有进程,不以终端机来区分
-l: 显示长列模式
-o:定义显示信息列的顺序(order)

 

VSZ: 进程在内存中的大小,以KB为单位,占用的虚拟内存

RSS: 进程在未换出时占用的物理内存,占用的实际内存

COMMAND,【】内的进程是内核态进程,没有【】的是用户态进程。

STAT: 代表当前进程状态的双字符状态码(它比Unix风格输出的单字节字符状态码能够更清楚的表达当前进程的状态;第一个字符和Unix表达意思一样,第二个字符进一步说明进程的状态)

TTY:进程启动的终端设备。用?表示进程没有关联到任何TTY,即它们是后台进程。另外tty1-tty6是本机上面的登入者程序,若为pts/0等,则表示由网路连接进入主机

 

  • R (Running):进程正在运行或在运行队列中等待执行。

  • S (Sleeping):进程处于睡眠状态,即正在等待某个事件的发生。

  • D (Uninterruptible Sleep):进程处于不可中断的睡眠状态,通常是在等待硬件设备的响应或处理 I/O 操作。

  • Z (Zombie):僵尸进程,即已经终止但是父进程尚未回收其资源的进程。

  • T (Stopped):进程处于停止状态,通常是收到了 SIGSTOPSIGTSTPSIGTTINSIGTTOU 信号。

  • t (Traced or Debugged):进程被跟踪或调试。

  • W (Paging):表示进程正在等待 I/O 操作完成(写入交换分区)。

  • X (Dead):表示进程已经终止。

  • <: 表示进程运行在高优先级上

  • N: 表示进程运行在低优先级上

  • L: 表示进程有页面锁定在内存中

  • s: 表示进程是控制进程,代表会话(Session)的领导者。会话是一个或多个进程组的集合,通常与用户登录会话相关联。

  • l: 表示进程是多线程的

  • +: 表示当前进程运行在前台

如下可以看到vim的状态,用`clt+z后查看,状态是T;

打开文档后:!ps-aux | grep vim后查看,状态是S+,就前台休眠

1690600354502

例1:从小到大,查看CPU占用率

[root@fishman-160 ~]# ps -aux --sort %cpu |head -5 #从小到大,查看CPU占用率
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.5 173016 11096 ?        Ss   12:10   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root           2  0.0  0.0      0     0 ?        S    12:10   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   12:10   0:00 [rcu_gp]
root           4  0.0  0.0      0     0 ?        I<   12:10   0:00 [rcu_par_gp]

例2:从大到小,查看CPU占用率

root@fishman-160 ~]# ps -aux --sort -%cpu |head -5
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         994  0.2  1.5 696124 31152 ?        Ssl  12:10   0:46 /usr/libexec/platform-python -Es /usr/sbin/tuned -l -P
root           1  0.0  0.5 173016 11096 ?        Ss   12:10   0:02 /usr/lib/systemd/systemd --switched-root --system --deserialize 17
root           2  0.0  0.0      0     0 ?        S    12:10   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        I<   12:10   0:00 [rcu_gp]

例3:从大到小,查看内存占用率

[root@fishman-160 ~]# ps -aux --sort -%mem |head -5
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
gdm         1466  0.0 13.0 3893476 260028 tty1   Sl+  12:10   0:17 /usr/bin/gnome-shell
root        1726  0.0 12.2 884416 242692 ?       Ssl  12:11   0:15 /usr/libexec/packagekitd
gdm         1684  0.0  3.0 749940 60120 tty1     Sl   12:11   0:00 /usr/libexec/ibus-x11 --kill-daemon
gdm         1618  0.0  2.5 288560 51496 tty1     S+   12:11   0:00 /usr/bin/Xwayland :1024 -rootless -terminate -accessx -core -auth /run/user/42/.mutter-Xwaylandauth.SK0681 -listen 4 -listen 5 -displayfd 6
[root@fishman-160 ~]# 

例4:格式化方式输出内存占用率前10的进程

[root@fishman-160 ~]# ps -aux --sort -%mem |head -10 | awk '{printf "%-30s %-10s %-5s\n",$NF,$1,$4}' 
COMMAND                        USER       %MEM 
/usr/bin/gnome-shell           gdm        13.0 
/usr/libexec/packagekitd       root       12.2 
--kill-daemon                  gdm        3.0  
6                              gdm        2.5  
--nopid                        root       2.0  
-P                             root       1.5  
--no-debug                     polkitd    1.4  
/usr/libexec/gsd-wacom         gdm        1.2  
/usr/libexec/gsd-media-keys    gdm        1.1  

#awk '{printf "%-30s %-10s %-5s\n",$NF,$1,$4}': 这部分使用 awk 命令来格式化输出。awk 是一种用于处理文本数据的强大工具。

$NF: 表示输出结果的最后一列,也就是进程的名称。
$1: 表示输出结果的第一列,也就是进程的用户。
$4: 表示输出结果的第四列,也就是进程的内存占用百分比。
#printf "%-30s %-10s %-5s\n": 使用 printf 函数来指定输出的格式,%-30s 表示输出字符串左对齐且占据30个字符的宽度,%-10s 表示输出字符串左对齐且占据10个字符的宽度,%-5s 表示输出字符串左对齐且占据5个字符的宽度。

四、uptime和top

1、uptime

查看cpu负载

1690602470517

参数 描述
11:46:!6 当前系统时间
up 1:141 user 系统运行时间,格式为时:分当前登录用户数
1 userload average:0.00,0.00,0.00 当前登录用户数系统负载,即任务队列的平均长度。三个数值分别为1分钟,5分钟,15分钟前到现在的平均值
load average:0.00,0.00,0.0011:46:!6 系统负载,即任务队列的平均长度。三个数值分别为1分钟,5分钟,15分钟前到现在的平均值

2、top

top 命令是一个用于监视系统性能的实用程序,它以交互式的方式显示系统中运行的进程的实时信息。top 的界面通常分为几个区域,包括进程列表、系统概览、任务区和命令行区。以下是 top 命令界面的四个主要窗口:

  1. 进程列表窗口:

    • 该窗口显示当前运行在系统上的所有进程列表。它包括每个进程的详细信息,如进程ID(PID)、用户、CPU使用率、内存使用情况等。这是 top 界面的主要区域,提供了对系统进程状况的全面了解。

  2. 系统概览窗口:

    • 这个窗口位于进程列表的顶部,显示系统的总体性能概览,包括系统运行时间、平均负载、CPU使用情况、内存使用情况、交换空间等信息。这些指标提供了系统整体性能的快速概览。

  3. 任务区窗口:

    • 任务区窗口通常显示一些常用的操作和键盘快捷键,以帮助用户与 top 命令进行交互。这包括一些常见的命令,如排序、过滤、刷新等,以及一些与进程交互的操作,如终止进程等。

  4. 命令行区窗口:

    • 这个区域通常位于 top 界面的底部,提供一个命令行提示符,用户可以在这里输入特定的命令来执行一些 top 命令的操作,例如改变排序方式、筛选进程等。这使用户能够直接与 top 交互并执行一些自定义的操作。

1.1、交互模式

top快捷键

  • 默认3S刷新一次,按d/s修改刷新时间

  • w:保存配置

  • Space:立即刷新

  • q:退出

  • M:按内存排序

  • P:按CPU排序

  • u/U:指定显示用户

  • 1:展开CPU核心数

  • h:帮助

  • T:将进程按运行时间长短排序

  • F:显示/隐藏字段列。在字段列菜单中选择要显示的字段。

  • K:终止(杀死)选中的进程。输入此键后,然后输入要终止的进程的PID(进程ID)并按回车键。

进程和CPU信息(第二和第三行)

1690606481607

参数 描述
Tasks:237 total 进程总数
1 running 正在运行的进程
236 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
0.1us 系统用户进程使用CPU百分比
0.1sy 内核中的进程占用的CPU百分比
0.0 ni 用户进程空间内改变过优先级的进程占用CPU百分比
99.8 id 空闲CPU百分比

内存信息(第四和第五行)

参数 描述
1939.3 total 物理内存总数
578.4 free 空闲内存总数
690.9 used 使用的物理内存总数
670.0 buff/cache 用内核缓存的内存量,和free -k 一个意思1690606839381-1690606870050-7
Swap:2048.0 tatal 交换区总量
2047.2 free 空闲交换区总量
0.8 used 使用交换区总量
1080.8 avail Mem 总的可利用内存是多少

进程信息

1690607072143

参数 描述
PID 进程号
USER 进程所有者的用户名
PR 优先级(内核动态调整),用户不能
NI 进程优先级,NICE值。负值表示高优先级,正值表示低优先级,用户可以自己调整
VIRT 虚拟内存,是进程正在使用的所有内存(ps中标为VSZ)VIRT:virtual memory usage 虚拟内存 1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等;2、假如进程申请100m的内存,但实际只使用10m,那么它会增长100m,而不是实际使用量
RES 是进程所使用的物理内存。实际使用内存(PS中的RSS)RES:resident memory usage 常驻内存 1、进程当前使用的物理内存大小,但不包括swap out; 2、包含其他进程的共享 ;3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 ;3、关于库占用内存的情况,它只统计加载的库文件所占用内存大小
SHR 共享内存大小,单位kb SHR:shared memory 共享内存 1、除M了自身进程的共享内存,也包括其他进程的共享进内存。2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小。3、计算某个进程所占的物理内存大小:RES-SHR 。4、swap out后,它会降下来。
S 进程状态 D=不可中断的睡眠状态 R=运行中或可运行 S=睡眠中 T=已跟踪或已停止 Z=僵尸进程
%CPU 上次更新到现在的CPU时间占用百分比
%MEM 上次更新到现在的物理内存百分比
TIME+ 进程使用的CPU时间统计,单位1/100秒
COMMAND 命令名/命令行

1.2、非交互模式

选项:

  • -b:以批处理(非交互)模式运行top

    • 例如:top -b -n 1 以批处理模式运行top一次。

  • -n:指定要执行的次数,通常与-b一起使用。

    • 例如:top -b -n 5 以批处理模式运行top五次。

  • -d:指定更新间隔(秒),通常与-b一起使用。

    • 例如:top -b -d 5 以5秒的间隔运行top

  • -o:指定初始排序字段(默认为CPU使用率)。

    • 例如:top -b -o +%CPU 以批处理模式运行top,按CPU使用率降序排序。

  • -u:仅显示指定用户的进程。

    • 例如:top -b -u username 以批处理模式运行top,仅显示指定用户的进程。

1.3、任务区窗口

top 命令的任务区窗口,确实有四个常见的字段组,它们分别是 Define, User, Memory, 和 Job.

  1. Define ('d') - 定义显示:

    • 这个字段组允许用户自定义显示的字段。用户可以选择要显示的列,以及列的顺序。通过按 'd' 键,用户可以进入自定义显示界面,然后选择和排列要显示的字段。

  2. User ('u') - 用户过滤:

    • 该字段组允许用户设置过滤条件,以仅显示属于特定用户的进程。通过按 'u' 键,用户可以选择要过滤的用户,使 top 只显示符合该用户条件的进程。

  3. Memory ('m') - 内存排序:

    • 这个字段组用于排序进程列表,以便按照内存使用量进行排序。通过按 'm' 键,用户可以选择按照进程的内存使用量来排序,以便更容易识别内存占用最多的进程。

  4. Jobs ('J') - 作业管理:

    • 该字段组提供有关作业(jobs)的信息,这些作业可能是由 shell 启动的任务。通过按 'J' 键,用户可以查看有关作业的信息,包括作业的状态、进程ID等。

#g
Choose field group (1 - 4) 

#shfit a    
显示4个窗口 通过a 或者 w 进行窗口切换

image-20231117124839891

image-20231127154907790

image-20231127154920783

 

五、lsof

lsof(List Open Files)命令是用于列出系统中当前打开的文件和网络连接的工具。它可以显示哪些进程打开了哪些文件、设备、网络套接字等。lsof在诊断系统问题、查找资源泄漏或查看系统资源使用情况时非常有用。

基础语法

lsof [OPTIONS]

常用的lsof选项包括:

  • -i:显示网络套接字相关信息。

  • -p <pid>:指定要查询的进程ID。

  • -u <username>:指定要查询的用户名。

  • -c <command>:指定要查询的进程命令名。

  • -t:仅显示进程ID。

  • -n:不解析主机名和端口号。

  • -iTCP:仅显示TCP套接字。

  • -iUDP:仅显示UDP套接字。

  • -iTCP -sTCP:LISTEN:仅显示监听状态的TCP套接字。

  • -iTCP -sTCP:ESTABLISHED:仅显示建立连接的TCP套接字。

查看某个特定进程打开的文件,可以使用-p选项,并指定进程ID:

lsof -p <pid>

例:

[root@fishman-160 ~]# vim passwd

root        4445  0.2  0.4 245796  8292 pts/4    S+   13:25   0:00 vim passwd
root        4446  0.0  0.1 222532  3220 pts/4    S+   13:25   0:00 /bin/bash -c ps -aux | grep vim
root        4448  0.0  0.0 221944  1204 pts/4    S+   13:25   0:00 grep vim
#通过lsof -p 4445 查看4445进程打开的文件
Press ENTER or type command to continue
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/0/gvfs
      Output information may be incomplete.
COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME
vim     4445 root  cwd    DIR    8,3      4096 67160193 /root
vim     4445 root  rtd    DIR    8,3       244      128 /
vim     4445 root  txt    REG    8,3   3067904  2469991 /usr/bin/vim
vim     4445 root  mem    REG    8,3     54352 34002995 /usr/lib64/libnss_files-2.28.so
vim     4445 root  mem    REG    8,3 217804320 73170251 /usr/lib/locale/locale-archive
vim     4445 root  mem    REG    8,3     26704 34018565 /usr/lib64/libattr.so.1.1.2448
vim     4445 root  mem    REG    8,3    543304 33986762 /usr/lib64/libpcre2-8.so.0.7.1
vim     4445 root  mem    REG    8,3   2089936 34002983 /usr/lib64/libc-2.28.so
vim     4445 root  mem    REG    8,3    149984 34002997 /usr/lib64/libpthread-2.28.so
vim     4445 root  mem    REG    8,3     19128 34002985 /usr/lib64/libdl-2.28.so
vim     4445 root  mem    REG    8,3     28984 34403835 /usr/lib64/libgpm.so.2.1.0
vim     4445 root  mem    REG    8,3     59272 34018567 /usr/lib64/libacl.so.1.1.2253
vim     4445 root  mem    REG    8,3    187496 33986795 /usr/lib64/libtinfo.so.6.1
vim     4445 root  mem    REG    8,3    172104 33986768 /usr/lib64/libselinux.so.1
vim     4445 root  mem    REG    8,3   1598824 34002987 /usr/lib64/libm-2.28.so
vim     4445 root  mem    REG    8,3   1062184 34002976 /usr/lib64/ld-2.28.so
vim     4445 root    0u   CHR  136,4       0t0        7 /dev/pts/4
vim     4445 root    1u   CHR  136,4       0t0        7 /dev/pts/4
vim     4445 root    2u   CHR  136,4       0t0        7 /dev/pts/4
vim     4445 root    4u   REG    8,3     12288 67187520 /root/.passwd.swp

Press ENTER or type command to continue

查看某个特定用户打开的文件,可以使用-u选项,并指定用户名:

lsof -u <username>

要查看某个特定命令打开的文件,可以使用-c选项,并指定命令名:

lsof -c <command>

查看系统上正在使用某个端口的网络连接和打开的文件:

losf -i <:端口号>

例:

[root@fishman-160 ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1511/dnsmasq        
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      968/sshd            
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      965/cupsd           
tcp        0      0 127.0.0.1:6014          0.0.0.0:*               LISTEN      3019/sshd: root@pts 
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd           
tcp6       0      0 :::80                   :::*                    LISTEN      5113/httpd          
tcp6       0      0 :::22                   :::*                    LISTEN      968/sshd            
tcp6       0      0 ::1:631                 :::*                    LISTEN      965/cupsd           
tcp6       0      0 ::1:6014                :::*                    LISTEN      3019/sshd: root@pts 
[root@fishman-160 ~]# lsof -i :80 查看80端口
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   5113   root    4u  IPv6  87515      0t0  TCP *:http (LISTEN)
httpd   5115 apache    4u  IPv6  87515      0t0  TCP *:http (LISTEN)
httpd   5116 apache    4u  IPv6  87515      0t0  TCP *:http (LISTEN)
httpd   5117 apache    4u  IPv6  87515      0t0  TCP *:http (LISTEN)``` sh

六、pstree

pstree 命令用于显示系统中的进程树,以树状结构展示进程及其之间的父子关系。它可以帮助我们更直观地了解当前系统中的进程层级关系,从而更好地理解进程之间的衍生关系和相互影响。

基础语法

psree [option]

常用的选项包括:

  • -p:显示进程的PID(进程ID)。

  • -a:显示进程的命令行参数。

  • -h:高亮当前进程。

  • -u:显示进程的拥有者(用户)。

  • -A:使用ASCII字符绘制进程树。

查看某个进程的父子关系(通过进程树)

例:

1690609320361

七、linux后台进程和前台进程

linux后台进程:

称之为守护进程(Daemon),是运行在后台的特殊进程。

守护的意思是不受终端控制,linux的大多服务器就是用守护进程实现的。比如web服务,httpd。后台进程没有控制终端,它不需要终端的交互

linux前台进程:

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

进程的前台和后台运行命令

fg,bg,jobs,nohup,&,ctrl+z

 

命令 描述
& 用在一个命令的末尾,可以把这个命令放在后台执行
ctrl+z 将一个正在前台运行的命令放到后台,并且暂停
jobs 查看当前多少个后台运行的进程,它是一个作业控制命令
fg 将后台的命令调至前台继续运行
bg 将一个后台暂停的命令,变成继续执行

八、kill进程

通过信号的方式来控制进程

基础命令

列出所有信号

kill -l 

1690618313951

信号编号 信号名称 描述
1 SIGHUP 重新加载配置
2 SIGINT 键盘终端ctrl+c
3 SIGQUIT 退出
9 SIGHTKILL 强制中断
15 SIGTERM 正常结束,中断信号
18 SIGCONT 继续
19 SIGTSTOP 停止
20 SIGHSTP 暂停 ctrl + z

九、pkill和killall

  1. pkill

    • pkill 命令通过进程名(或进程名的一部分)来终止进程。

    • 语法:pkill [选项] 进程名

    • 例如:pkill firefox 将终止所有名为 "firefox" 的进程。

  2. killall

    • killall 命令也是通过进程名来终止进程,但它要求提供完整的进程名(不支持模糊匹配)。

    • 语法:killall [选项] 进程名

    • 例如:killall firefox-bin 将终止所有名为 "firefox-bin" 的进程。

主要区别:

  • pkill 允许使用部分进程名进行模糊匹配,而 killall 要求使用完整的进程名。

  • 在某些系统上,killall 还可以用于终止信号处理器为某个特定用户的进程,但这取决于系统配置。

 

十、nice优先级

[root@fishman-160 ~]# nice -n 20 vim passwd #NI值设置为20

[1]+  Stopped                 nice -n 20 vim passwd
[root@fishman-160 ~]# ps -al | grep vim 
4 T     0    6511    3025  0  99  19 - 61428 -      pts/4    00:00:00 vim
[root@fishman-160 ~]# renice -n 5 6511 重新设置NI值为5
6511 (process ID) old priority 19, new priority 5
[root@fishman-160 ~]# ps -al | grep vim
4 T     0    6511    3025  0  85   5 - 61428 -      pts/4    00:00:00 vim
[root@fishman-160 ~]# 

十一、screen

screen 是一个用于在终端窗口中创建多个会话的工具。它允许你在一个终端窗口中同时运行多个命令或程序,并可以在这些会话之间切换,甚至在终端断开连接后重新连接到之前运行的会话。

基础语法

启动1个screen

screen

新建一个指定名称的screen会话

screen -S <会话名称>

 

列出所有当前存在的 screen 会话

screen -ls

分离当前的 screen 会话(将会话从终端断开,但会话继续在后台运行)

ctrl +a,d

重新连接到最近的一个被分离会话

ctrl -r 

重新连接到指定名称的 screen 会话

screen -r <会话名称或会话ID>

关闭当前screen会话

screen +d

强制关闭当前 screen 会话(会话中的程序会被终止)

screen -X -S 8189 quit

切换到指定编号的 screen 会话

ctrl +a ,<数字键>

切换到下一个 screen 会话

ctrl +a,n

切换到上一个screen会话

ctrl +a ,p

清理所有未使用的 screen 会话

screen -ls | grep Detached | cut -d. -f1 | awk '{print $1}' | xargs kill

CentOS8需要先安装epel-release

[root@fishman-160 ~]# dnf install epel-release
上次元数据过期检查:-584 days, 15:43:20 前,执行于 2025年03月04日 星期二 00时00分25秒。
软件包 epel-release-8-11.el8.noarch 已安装。
依赖关系解决。
========================================================================================================================================================================================================================================
 软件包                                                          架构                                                 版本                                                     仓库                                                大小
========================================================================================================================================================================================================================================
升级:
 epel-release                                                    noarch                                               8-19.el8                                                 epel                                                25 k
安装弱的依赖:
 epel-next-release                                               noarch                                               8-19.el8                                                 epel                                                11 k

事务概要
========================================================================================================================================================================================================================================
安装  1 软件包
升级  1 软件包

总下载:35 k
确定吗?[y/N]: y
下载软件包:
(1/2): epel-release-8-19.el8.noarch.rpm                                                                                                                                                                  56 kB/s |  25 kB     00:00    
(2/2): epel-next-release-8-19.el8.noarch.rpm                                                                                                                                                             14 kB/s |  11 kB     00:00    
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
总计                                                                                                                                                                                                     18 kB/s |  35 kB     00:02     
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
  准备中  :                                                                                                                                                                                                                         1/1 
  运行脚本: epel-release-8-19.el8.noarch                                                                                                                                                                                            1/1 
  升级    : epel-release-8-19.el8.noarch                                                                                                                                                                                            1/3 
  运行脚本: epel-release-8-19.el8.noarch                                                                                                                                                                                            1/3 
  安装    : epel-next-release-8-19.el8.noarch                                                                                                                                                                                       2/3 
  清理    : epel-release-8-11.el8.noarch                                                                                                                                                                                            3/3 
  运行脚本: epel-release-8-11.el8.noarch                                                                                                                                                                                            3/3 
/sbin/ldconfig: /usr/lib64/llvm15/lib/libclang.so.15 不是符号链接


  验证    : epel-next-release-8-19.el8.noarch                                                                                                                                                                                       1/3 
  验证    : epel-release-8-19.el8.noarch                                                                                                                                                                                            2/3 
  验证    : epel-release-8-11.el8.noarch                                                                                                                                                                                            3/3 

已升级:
  epel-release-8-19.el8.noarch                                                                                                                                                                                                          
已安装:
  epel-next-release-8-19.el8.noarch                                                                                                                                                                                                     

完毕!

安装screeen

[root@fishman-160 ~]# dnf install screen
Extra Packages for Enterprise Linux 8 - Next - x86_64                                                                                                                                                    80 kB/s | 368 kB     00:04    
上次元数据过期检查:-584 days, 15:44:16 前,执行于 2025年03月04日 星期二 00时00分25秒。
软件包 screen-4.6.2-12.el8.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!

十二、ss

ss(Socket Statistics)是一个用于显示网络套接字信息和统计数据的命令行工具。它通常用于查看系统上的网络连接和套接字状态。以下是ss命令的一些常见用法和选项:

基本用法:

ss [选项]

常见选项:

  1. -t:显示TCP套接字。

  2. -u:显示UDP套接字。

  3. -a:显示所有套接字,包括监听和非监听套接字。

  4. -n:以数字格式显示IP地址和端口,而不进行反向DNS查找。

  5. -l:显示仅监听(监听)的套接字。

  6. -p:显示与进程关联的套接字。

  7. -i:显示网络接口信息。

  8. -o:显示计时器信息。

  9. -e:显示详细信息,包括套接字状态、传输队列等。

  10. -H:显示标题行,标识各列的含义。

示例用法:

  1. 列出所有TCP连接:

    ss -t
  2. 列出所有UDP连接:

    ss -u
  3. 列出所有监听的TCP和UDP套接字:

    ss -tuln
  4. 列出与特定进程相关的套接字,使用-p选项并提供进程的PID:

    ss -tuln -p | grep <PID>
  5. 列出所有网络接口的信息:

    ss -i
  6. 列出计时器信息:

    ss -o
  7. 显示详细信息,包括套接字状态和传输队列等:

    ss -e

ss命令的输出包括本地地址、远程地址、状态、传输队列信息等,以及与套接字相关的详细数据。它是一个强大的工具,用于监视和诊断网络连接和套接字问题,以及查找与进程相关的网络活动。你可以根据具体的需求选择不同的选项和过滤条件来使用ss命令。

十三、vmstat

vmstat(Virtual Memory Statistics)是一个用于显示系统虚拟内存统计信息的命令行工具。它提供了有关系统性能和资源利用情况的关键指标,包括内存、进程、I/O等。以下是vmstat命令的一些常见用法和输出字段的详细解释:

基本用法:

vmstat [选项] [时间间隔] [计数]

常见选项:

  1. -a:显示所有虚拟内存统计信息,包括内存、进程、I/O和系统信息。

  2. -n:以数字格式显示输出,而不是以可读格式。

  3. -S {unit}:指定数字值的单位(例如,K、M、G)。

输出字段解释:

vmstat的输出通常包括以下字段:

  1. procs:进程统计信息。

    • r:运行队列中的进程数。

    • b:等待IO的进程数。

  2. memory:内存统计信息。

    • swpd:交换空间使用量。

    • free:空闲内存。

    • buff:用作缓冲区的内存。

    • cache:用作缓存的内存。

  3. swap:交换空间统计信息。

    • si:每秒从磁盘交换到内存的数据量。

    • so:每秒从内存交换到磁盘的数据量。

  4. io:I/O统计信息。

    • bi:每秒从块设备读取的块数。

    • bo:每秒写入块设备的块数。

  5. system:系统统计信息。

    • in:每秒中断数量。

    • cs:每秒上下文切换数量。

  6. cpu:CPU使用统计信息。

    • us:用户空间CPU使用百分比。

    • sy:系统内核空间CPU使用百分比。

    • id:CPU空闲百分比。

    • wa:等待IO的CPU百分比。

示例用法:

  1. 显示系统的虚拟内存统计信息:

    vmstat
  2. 以1秒的间隔显示虚拟内存统计信息,共显示5次:

    vmstat 1 5
  3. 以数字格式显示输出,以K为单位显示数字值:

    vmstat -n -S K

vmstat命令对于监视系统性能和检测资源瓶颈非常有用。通过观察输出,可以了解系统的运行情况,特别是内存使用、进程活动和I/O操作等方面的信息。根据具体的需求,你可以调整时间间隔和计数来获取更多或更少的数据点。

vmstat参数的解释和建议:

  1. swpd:交换空间使用量

    • 正常情况下,swpd的值应该保持较低。如果它不断增加,表示系统正在频繁地将内存中的数据写入交换空间,这可能是因为系统内存不足导致的。当swpd持续增加并接近交换空间的总容量时,系统性能可能会受到影响。

  2. free:空闲内存

    • free表示系统中当前未被使用的内存量。较低的free值并不一定表示问题,因为Linux系统通常会将未使用的内存用于文件系统缓存(cache)。只有在free持续很低的情况下,才可能出现内存不足问题。

  3. buffcache:缓冲区和缓存

    • buff和cache字段表示系统用于缓存数据的内存。这些缓存对于加速文件访问非常有用,通常会占用一部分可用内存。较高的buff和cache值是正常的。

    • 当系统需要更多内存来分配给应用程序时,Linux会自动释放部分缓冲区和缓存,以满足需求。因此,不必担心buff和cache占用了太多内存,除非可用内存非常有限。

  4. ussyidwa:CPU使用统计

    • us表示用户空间CPU使用率,sy表示系统内核空间CPU使用率,id表示CPU的空闲百分比,wa表示等待I/O的CPU百分比。

    • 通常情况下,较高的us和sy值可能表示CPU资源受限。较高的wa值可能表示系统正在等待磁盘I/O完成,这可能是磁盘性能问题的迹象。

  5. st:偷取时间

    • st表示CPU被虚拟机或其他虚拟化实例偷取的时间。对于物理服务器,通常不应该有st值,而在虚拟化环境中,st可能会出现。

要判断这些参数是否出现问题,通常需要结合系统的整体性能和工作负载来考虑。一般建议包括:

  • 监视这些参数的变化,查看它们是否持续变化或接近其极限。

  • swpd持续增加或free持续较低时,可能需要考虑增加系统内存。

  • ussy值较高且CPU利用率接近100%时,可能需要考虑升级CPU或优化应用程序。

  • wa值较高且系统性能受到磁盘I/O限制时,可能需要考虑优化存储系统。

标签:管理,0.0,vim,内存,进程,root,CPU
From: https://www.cnblogs.com/kcloveworld/p/17984413

相关文章

  • 信息安全管理与评估整理--ipv6有状态自动配置
    Ipv6地址池自动配置有状态以下是关闭ra消息抑制,配置前缀地址池方式,有状态自动配置l不自动获取网关,通过修改网卡—高级设置添加默认网关方式建立本地地址池调用l接口下调用通过wireshark抓包,需要将消息开启才能看到M,O为位比特前缀地址池信息A位与O位含义A比特位:f......
  • 用户管理
    一、用户与用户组的概念用户与用户组概念Linux是一个多用户、多任务的服务器操作系统,多用户多任务指可以在系统上建立多个用户,而多个用户可以在同一时间内登录同一个系统执行各自不同的任务,而互不影响。Linux用户是根据角色定义的,具体分为三种角色:超级用户:拥有对系统的最高管......
  • 文件管理
    1、创建文件touch文件名1文件名2[root@fishman-160~]#touch1.txt[root@fishman-160~]#ls1.txt公共模板视频图片文档下载音乐桌面anaconda-ks.cfginitial-setup-ks.cfg[root@fishman-160~]#touch{2..10}.txt[root@fishman-160~]#ls10.txt......
  • C#析构函数解析:资源管理的精要和使用技巧
     在C#中,析构函数(Destructor)是一个特殊的方法,用于清理对象占用的资源。它是由垃圾回收器在对象被销毁时自动调用的。析构函数的原理是在对象即将被回收时执行一些清理操作,例如释放非托管资源或执行一些对象销毁前的必要操作。析构函数的基本原理:调用时机: 当对象被垃圾回收......
  • 如何提升供应链文件收发的安全和效率,进行高质量管理?
    供应链文件收发是供应链管理中的一个重要环节,涉及到信息流、物流和资金流的有效传递。这些文件可能包括采购订单、发货通知、发票、运输单据、收货确认等。以下是一些关于供应链文件收发的文件类型基本信息:采购订单(PO):供应商收到的正式文件,表明客户已同意购买特定数量和规格的产品......
  • nodejs多版本管理
    github下载包               https://sites.ipaddress.com/raw.githubusercontent.com/     https://sites.ipaddress.com/github.com/            1.下载安装包到本地wgethttps://github.com/nvm-sh/nvm/ar......
  • minio 支持基于yaml 的配置管理
    minio23年底的一个版本中,支持了基于yaml的配置参数,以前基于环境变量的模式还是支持的,只是yaml成为一个首选模式参考配置yaml配置version:v1address:':9000'rootUser:'minioadmin'rootPassword:'pBU94AGAY85e'console-address:':9001'certs......
  • GIT版本管理工具教程
    GIT版本管理工具教程一Git初始化下载安装,下载地址:https://git-scm.com/downloads每个系统的都有(linux、mac、windows等),看官网的安装教程,很详细,此处我以windows来练习首先创建一个文件夹,这个文件夹就是我们将来通过git来管理的所有文件的存放地点。在文件夹中右键......
  • React 状态管理 valtio 解析
    valtio是什么valtio是一个很轻量级的响应式状态管理库,它基于Proxy实现,类似于vue的数据驱动视图的理念,使用外部状态代理去驱动React视图更新,不管在react组件内部还是外面都可以使用。下面提供valtio基本用法例子:https://codesandbox.io/embed/5x592g?view=Editor+%2B+Pr......
  • 许可证管理优化——企业软件资产管理的新篇章
    一、引言随着信息技术的飞速发展,各类软件在企业运营中扮演的角色日益重要。许可证管理作为软件资产管理的核心环节,其优化程度直接影响到企业的成本控制、合规风险以及业务效率。本文旨在探讨如何深入思考并优化许可证管理,以实现企业软件资产的最大价值。二、许可证管理现状与挑战......