一、什么是进程
进程是已启动的可执行程序的运行实例,
进程有以下组成部分:
-
已分配内存的地址空间
-
安全属性,包括所有权凭据和特权
-
程序代码的一个或多个执行线程
-
进程状态
程序: 二进制文件,静态 /bin/date,/usr/sbin/sshd
进程: 是程序运行的过程, 动态,有生命周期及运行状态。
下图所示的是进程的生命周期
描述如下:
父进程复制自己的地址空间(fork)创建一个新的(子)进程结构。每个新进程分配一个唯一的进程 ID (PID),满足跟踪安全性之需。PID 和 父进程 ID,(PPID)是子进程环境的元素,任何进程都可以创建子进程,所有进程都是第一个系统进程的后代。
PID 1
-
Linux5/6:init
-
Linux7:systemd
在 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()
等系统调用来处理子进程的退出状态信息,从而彻底释放子进程的资源,并将其完全回收。只有在父进程处理完子进程的退出状态后,子进程才会被彻底销毁,不再占用系统资源。
系统核心组成:
一个完整的LINUX内核包含5部分
-
内存管理:合理有效地管理整个系统的物理内存
-
进程管理:控制系统进程对CPU的访问进程间通信:用于控制不同进程之间在用户空间的同步,数据共享和交换
-
虚拟文件系统:文件系统模型屏蔽一些具体文件系统差异,可以分为:逻辑文件系统(EXT4..XFS)和设备驱动程序(为硬件写的驱动程序模块)
-
网络接口:提供对各种网络协议的实现和各种网络硬件的支持
二、进程的属性
-
进程ID(PID):是唯一的数值,用来区分进程
-
父进程的ID(PPID)
-
启动进程的用户ID(UID)和所归属的组(GID)
-
进程状态:状态分为运行R、休眠S、僵尸Z
-
进程执行的优先级
-
进程所连接的终端名
-
进程资源占用:比如占用资源大小(内存、CPU占用量)
三、进程管理工具
对于Linux进程的管理,是通过进程管理工具实现的,比如ps、kill、top.....
1、ps - 监视进程工具
默认情况下ps
命令不会提供太多信息给到我们
在LINUX系统中使用的GUN ps命令支持3种不同类型的命令行参数:
-
Unix风格的参数,前面加单破折线
-
BSD风格的参数,前面不加破折线
-
GNU风格的参数,前面加双破折线
1.1、Unix风格
常用的参数;
-f 显示完整格式输出
-e 显示所有进程
-l 显示长列表
我们常用的组合: ps -ef
-
UID:启动进程的用户ID
-
PID:进程ID
-
PPID:父进程ID
-
C:进程生命周期的CPU利用率
-
STIME:进程启动时的系统时间
-
TTY:进程启动的终端设备
-
TIME:运行进程需要的累计CPU时间
-
CMD:启动的程序名称
通过ps -efl
查看
-
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):进程处于停止状态,通常是收到了
SIGSTOP
、SIGTSTP
、SIGTTIN
或SIGTTOU
信号。 -
t (Traced or Debugged):进程被跟踪或调试。
-
W (Paging):表示进程正在等待 I/O 操作完成(写入交换分区)。
-
X (Dead):表示进程已经终止。
-
<: 表示进程运行在高优先级上
-
N: 表示进程运行在低优先级上
-
L: 表示进程有页面锁定在内存中
-
s: 表示进程是控制进程,代表会话(Session)的领导者。会话是一个或多个进程组的集合,通常与用户登录会话相关联。
-
l: 表示进程是多线程的
-
+: 表示当前进程运行在前台
如下可以看到vim的状态,用`clt+z
后查看,状态是T;
打开文档后:!ps-aux | grep vim
后查看,状态是S+,就前台休眠
例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负载
参数 | 描述 |
---|---|
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
命令界面的四个主要窗口:
-
进程列表窗口:
-
该窗口显示当前运行在系统上的所有进程列表。它包括每个进程的详细信息,如进程ID(PID)、用户、CPU使用率、内存使用情况等。这是
top
界面的主要区域,提供了对系统进程状况的全面了解。
-
-
系统概览窗口:
-
这个窗口位于进程列表的顶部,显示系统的总体性能概览,包括系统运行时间、平均负载、CPU使用情况、内存使用情况、交换空间等信息。这些指标提供了系统整体性能的快速概览。
-
-
任务区窗口:
-
任务区窗口通常显示一些常用的操作和键盘快捷键,以帮助用户与
top
命令进行交互。这包括一些常见的命令,如排序、过滤、刷新等,以及一些与进程交互的操作,如终止进程等。
-
-
命令行区窗口:
-
这个区域通常位于
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信息(第二和第三行)
参数 | 描述 |
---|---|
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 一个意思 |
Swap:2048.0 tatal | 交换区总量 |
2047.2 free | 空闲交换区总量 |
0.8 used | 使用交换区总量 |
1080.8 avail Mem | 总的可利用内存是多少 |
进程信息
参数 | 描述 |
---|---|
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
.
-
Define ('d') - 定义显示:
-
这个字段组允许用户自定义显示的字段。用户可以选择要显示的列,以及列的顺序。通过按 'd' 键,用户可以进入自定义显示界面,然后选择和排列要显示的字段。
-
-
User ('u') - 用户过滤:
-
该字段组允许用户设置过滤条件,以仅显示属于特定用户的进程。通过按 'u' 键,用户可以选择要过滤的用户,使
top
只显示符合该用户条件的进程。
-
-
Memory ('m') - 内存排序:
-
这个字段组用于排序进程列表,以便按照内存使用量进行排序。通过按 'm' 键,用户可以选择按照进程的内存使用量来排序,以便更容易识别内存占用最多的进程。
-
-
Jobs ('J') - 作业管理:
-
该字段组提供有关作业(jobs)的信息,这些作业可能是由 shell 启动的任务。通过按 'J' 键,用户可以查看有关作业的信息,包括作业的状态、进程ID等。
-
#g
Choose field group (1 - 4)
#shfit a
显示4个窗口 通过a 或者 w 进行窗口切换
五、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字符绘制进程树。
查看某个进程的父子关系(通过进程树)
例:
七、linux后台进程和前台进程
linux后台进程:
称之为守护进程(Daemon),是运行在后台的特殊进程。
守护的意思是不受终端控制,linux的大多服务器就是用守护进程实现的。比如web服务,httpd。后台进程没有控制终端,它不需要终端的交互
linux前台进程:
是在终端中运行的命令,那么该终端就为进程的控制终端。一旦这个终端关闭,这个进程也随之消失。
进程的前台和后台运行命令
fg,bg,jobs,nohup,&,ctrl+z
命令 | 描述 |
---|---|
& | 用在一个命令的末尾,可以把这个命令放在后台执行 |
ctrl+z | 将一个正在前台运行的命令放到后台,并且暂停 |
jobs | 查看当前多少个后台运行的进程,它是一个作业控制命令 |
fg | 将后台的命令调至前台继续运行 |
bg | 将一个后台暂停的命令,变成继续执行 |
八、kill进程
通过信号的方式来控制进程
基础命令
列出所有信号
kill -l
信号编号 | 信号名称 | 描述 |
---|---|---|
1 | SIGHUP | 重新加载配置 |
2 | SIGINT | 键盘终端ctrl+c |
3 | SIGQUIT | 退出 |
9 | SIGHTKILL | 强制中断 |
15 | SIGTERM | 正常结束,中断信号 |
18 | SIGCONT | 继续 |
19 | SIGTSTOP | 停止 |
20 | SIGHSTP | 暂停 ctrl + z |
九、pkill和killall
-
pkill
:-
pkill
命令通过进程名(或进程名的一部分)来终止进程。 -
语法:
pkill [选项] 进程名
-
例如:
pkill firefox
将终止所有名为 "firefox" 的进程。
-
-
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 [选项]
常见选项:
-
-t
:显示TCP套接字。 -
-u
:显示UDP套接字。 -
-a
:显示所有套接字,包括监听和非监听套接字。 -
-n
:以数字格式显示IP地址和端口,而不进行反向DNS查找。 -
-l
:显示仅监听(监听)的套接字。 -
-p
:显示与进程关联的套接字。 -
-i
:显示网络接口信息。 -
-o
:显示计时器信息。 -
-e
:显示详细信息,包括套接字状态、传输队列等。 -
-H
:显示标题行,标识各列的含义。
示例用法:
-
列出所有TCP连接:
ss -t
-
列出所有UDP连接:
ss -u
-
列出所有监听的TCP和UDP套接字:
ss -tuln
-
列出与特定进程相关的套接字,使用
-p
选项并提供进程的PID:ss -tuln -p | grep <PID>
-
列出所有网络接口的信息:
ss -i
-
列出计时器信息:
ss -o
-
显示详细信息,包括套接字状态和传输队列等:
ss -e
ss
命令的输出包括本地地址、远程地址、状态、传输队列信息等,以及与套接字相关的详细数据。它是一个强大的工具,用于监视和诊断网络连接和套接字问题,以及查找与进程相关的网络活动。你可以根据具体的需求选择不同的选项和过滤条件来使用ss
命令。
十三、vmstat
vmstat
(Virtual Memory Statistics)是一个用于显示系统虚拟内存统计信息的命令行工具。它提供了有关系统性能和资源利用情况的关键指标,包括内存、进程、I/O等。以下是vmstat
命令的一些常见用法和输出字段的详细解释:
基本用法:
vmstat [选项] [时间间隔] [计数]
常见选项:
-
-a
:显示所有虚拟内存统计信息,包括内存、进程、I/O和系统信息。 -
-n
:以数字格式显示输出,而不是以可读格式。 -
-S {unit}
:指定数字值的单位(例如,K、M、G)。
输出字段解释:
vmstat
的输出通常包括以下字段:
-
procs
:进程统计信息。-
r
:运行队列中的进程数。 -
b
:等待IO的进程数。
-
-
memory
:内存统计信息。-
swpd
:交换空间使用量。 -
free
:空闲内存。 -
buff
:用作缓冲区的内存。 -
cache
:用作缓存的内存。
-
-
swap
:交换空间统计信息。-
si
:每秒从磁盘交换到内存的数据量。 -
so
:每秒从内存交换到磁盘的数据量。
-
-
io
:I/O统计信息。-
bi
:每秒从块设备读取的块数。 -
bo
:每秒写入块设备的块数。
-
-
system
:系统统计信息。-
in
:每秒中断数量。 -
cs
:每秒上下文切换数量。
-
-
cpu
:CPU使用统计信息。-
us
:用户空间CPU使用百分比。 -
sy
:系统内核空间CPU使用百分比。 -
id
:CPU空闲百分比。 -
wa
:等待IO的CPU百分比。
-
示例用法:
-
显示系统的虚拟内存统计信息:
vmstat
-
以1秒的间隔显示虚拟内存统计信息,共显示5次:
vmstat 1 5
-
以数字格式显示输出,以K为单位显示数字值:
vmstat -n -S K
vmstat
命令对于监视系统性能和检测资源瓶颈非常有用。通过观察输出,可以了解系统的运行情况,特别是内存使用、进程活动和I/O操作等方面的信息。根据具体的需求,你可以调整时间间隔和计数来获取更多或更少的数据点。
vmstat
参数的解释和建议:
-
swpd
:交换空间使用量-
正常情况下,
swpd
的值应该保持较低。如果它不断增加,表示系统正在频繁地将内存中的数据写入交换空间,这可能是因为系统内存不足导致的。当swpd
持续增加并接近交换空间的总容量时,系统性能可能会受到影响。
-
-
free:空闲内存
-
free表示系统中当前未被使用的内存量。较低的free值并不一定表示问题,因为Linux系统通常会将未使用的内存用于文件系统缓存(cache)。只有在free持续很低的情况下,才可能出现内存不足问题。
-
-
buff 和 cache:缓冲区和缓存
-
buff和cache字段表示系统用于缓存数据的内存。这些缓存对于加速文件访问非常有用,通常会占用一部分可用内存。较高的buff和cache值是正常的。
-
当系统需要更多内存来分配给应用程序时,Linux会自动释放部分缓冲区和缓存,以满足需求。因此,不必担心buff和cache占用了太多内存,除非可用内存非常有限。
-
-
us、sy、id 和 wa:CPU使用统计
-
us表示用户空间CPU使用率,sy表示系统内核空间CPU使用率,id表示CPU的空闲百分比,wa表示等待I/O的CPU百分比。
-
通常情况下,较高的us和sy值可能表示CPU资源受限。较高的wa值可能表示系统正在等待磁盘I/O完成,这可能是磁盘性能问题的迹象。
-
-
st:偷取时间
-
st表示CPU被虚拟机或其他虚拟化实例偷取的时间。对于物理服务器,通常不应该有st值,而在虚拟化环境中,st可能会出现。
-
要判断这些参数是否出现问题,通常需要结合系统的整体性能和工作负载来考虑。一般建议包括:
-
监视这些参数的变化,查看它们是否持续变化或接近其极限。
-
当
swpd
持续增加或free
持续较低时,可能需要考虑增加系统内存。 -
当
us
和sy
值较高且CPU利用率接近100%时,可能需要考虑升级CPU或优化应用程序。 -
当
wa
值较高且系统性能受到磁盘I/O
限制时,可能需要考虑优化存储系统。