查看原文
其他

服了!新来的运维3个操作把我整蒙了

李逸皓 运维book思议 2024-04-22

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

只会用scp?那也太Low了

很多人安装了Ubuntu第一步就做错了

基于Docker容器部署MySQL数据库

Linux系统内核编译过程详解

Linux系统360°全方位性能瓶颈检测



在Linux操作系统中,进程管理是操作系统的核心功能之一。Linux系统允许同时运行多个进程,这些进程可能是系统内核的一部分,也可以是用户自己创建的。为了有效地管理这些进程,Linux提供了一系列强大的进程管理工具,使用户能够监视、控制和优化系统中运行的进程。
这些进程管理工具不仅仅是系统管理员的利器,对于开发人员和普通用户来说也是非常有用的,因为它们可以帮助我们理解系统的运行情况,解决性能问题,以及确保系统稳定运行。

每个进程的CPU资源都是由系统内核分配的,并且系统内核负责管理进程。每一个进程都有其独一无二的标识符,即进程标识符,也称PID(Packet Identifier)。PID用于系统内核识别进程,便于其对进程的管理。

1.ps

Linux中的ps命令是Process Status的缩写,通常用于静态地查看当前系统中正在运行的进程。

ps命令常见参数:

a:显示当前终端下所有进程

-a:显示同一终端下所有进程

-A:显示所有进程

-e:显示所有进程

e:显示进程环境变量

u:指定用户的所有进程

-au:显示比较详细的信息

-aux:显示所有包含其他使用者的进程

以上只是ps命令的部分参数,读者可以查看ps命令的man手册,获取更多相关内容。

ps命令的具体使用方式,示例代码如下。

[root@localhost ~]# ps -auxUSER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND...root 2 0.0 0.0 0 0 ? S 10:17 0:00 [kthreadd]root 3 0.1 0.0 0 0 ? S 10:17 0:00 [ksoftirqd/0]root 4 0.0 0.0 0 0 ? S 10:17 0:00 [kworker/0:0]root 5 0.0 0.0 0 0 ? S< 10:17 0:00 [kworker/0:0H]root 7 0.0 0.0 0 0 ? S 10:17 0:00 [migration/0]root 8 0.0 0.0 0 0 ? S 10:17 0:00 [rcu_bh]root 9 0.0 0.0 0 0 ? R 10:17 0:00 [rcu_sched]...

上述示例中,通过ps命令显示出了当前系统中所有用户的进程。

ps是一款强大的进程查看命令,能够查看当前进程的状态、占用资源等信息。但ps是一款静态查看工具,查看的只是将执行该命令时获取的信息以快照的方式呈现出来。

2.top

top是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。默认情况下,top界面每3秒种更新一次数据,是一款很实用的工具。

top命令常用参数:

-c:显示完整的命令

-i:配置数据更新时间间隔

-u:指定用户名

-p:指定进

-n:指定循环显示次数

执行top命令,示例代码如下。

[root@localhost ~]# toptop - 11:22:43 up 1:04, 2 users, load average: 0.00, 0.01, 0.05Tasks: 207 total, 2 running, 205 sleeping, 0 stopped, 0 zombie%Cpu(s): 2.4 us, 1.0 sy, 0.0 ni, 96.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 3861484 total, 1073184 free, 835532 used, 1952768 buff/cacheKiB Swap: 2097148 total, 2097148 free, 0 used. 2670068 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10296 root 20 0 312412 41576 21500 S 1.7 1.1 0:03.38 X 20528 root 20 0 3019052 194484 66456 S 1.7 5.0 0:07.25 gnome-Shell 21277 root 20 0 698452 31916 18544 S 0.7 0.8 0:01.48 gnome-terminal- 1 root 20 0 128264 6924 4184 S 0.0 0.2 0:01.87 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:03.98 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh 9 root 20 0 0 0 0 S 0.0 0.0 0:00.59 rcu_sched 10 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 lru-add-drain 11 root rt 0 0 0 0 S 0.0 0.0 0:00.01 watchdog/0 13 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kdevtmpfs 14 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 netns 15 root 20 0 0 0 0 S 0.0 0.0 0:00.00 khungtaskd 16 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 writeback 17 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kintegrityd 18 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset 19 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 bioset...

上述示例中,前5行时当前系统进程的统计信息。其中,第一行是任务队列信息,最后3个数值分别表示1分钟、5分钟、15分钟的负载情况。第二行是进程信息,示例中目前共有207个进程,有2个进程在运行,有205个进程在睡眠态。第三行是CPU状态信息,示例中当前用户空间占用CPU的百分比是2.4%,内核空间占用CPU的百分比是1%,空闲CPU的百分比是96.6%。第四行是内存状态,数值单位默认是KB,示例中目前内存总用量约为3.8G,空闲内存空间约为1G,使用中的内存总量约为0.8G,缓存的内存量约为1.9G。第五行是交换分区信息,第六行是空行,第七行是表头,第七行以下则是各进程的状态实时监控。

top监控项及其说明:

PID:进程标识符,即进程ID

USER:进程所有者

PR:进程优先级

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

VIRT:进程使用的虚拟内存总量,单位KB

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

SHR:共享内存大小,单位KB

S:进程状态

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

%MEM:进程使用的物理内存百分比TIME进程使用的CPU时间总计

COMMAND:进程名称

由于执行top命令之后会对用户提供一个动态界面,所以用户可以通过一些操作对界面进行管理。

top命令中的快捷键:

l:切换显示平均负载和启动时间信息

m:切换显示内存信息

t:切换显示进程和CPU状态信息

r:重新配置一个进程的优先级别

i:忽略闲置和僵尸进程

k:终止一个进程

M:根据驻留内存大小进行排序

P:根据CPU使用百分比大小进行排序

T:根据总计时间进行排序

q:退出

3.pstree

Linux系统启动之后第一个产生的进程,在CentOS 7之前叫做init,从CentOS 7开始叫做systemd。在其之后所产生的系统进程都是直接或间接地根据它自身创建出来的,每一个进程都是由其父进程创建的,新进程则是其父进程的子进程,由同一个父进程创建出来的多个子进程之间称为兄弟进程。

通过pstree命令能够清晰地查看各个进程之间的关系,示例代码如下。

[root@localhost ~]# pstreesystemd─┬─ModemManager───2*[{ModemManager}] ├─NetworkManager─┬─dhclient │ └─2*[{NetworkManager}] ├─VGAuthService ├─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}...

另外,pstree命令也支持个各种参数,用户通过pstree的参数使树状图按照特定的方式排列。

pstree命令常用参数:

-a:显示进程的完整命令

-c:禁用精简的标识

-h:列出当前正在执行的进程及其父进程

-u:显示各进程的用户名称

-n:同一父进程下的子进程按照PID排序

更多参数可以通过man手册查看。

4.pgrep

pgrep命令能够根据进程名称查询相关的进程信息,但默认只显示进程PID。Linux系统中可能存在多个同名的进程,但通过pgrep命令可以缩小查找范围。

pgrep命令的常用参数:

-o:显示PID最小的进程

-n:显示PID最大的进程

-l:同时显示PID与进程名称

-p:指定父进程的PID

-t:指定开始进程的终端

-u:指定进程的用户ID

下面演示pgrep命令的使用方式,示例代码如下。

#显示关于shh的进程(默认只显示PID)[root@localhost ~]# pgrep ssh987211043#显示出关于shh的进程名与PID[root@localhost ~]# pgrep -l ssh9872 sshd11043 ssh-agent#显示关于shh进程中PID最小的进程[root@localhost ~]# pgrep -lo ssh9872 sshd#显示关于shh进程中PID最大的进程[root@localhost ~]# pgrep -ln ssh11043 ssh-agent

5.nice

进程的执行顺序是由进程的优先级来决定的,用户可以通过nice命令修改或指定进程的优先级。

nice命令常用参数是-n,表示进程的优先级,该参数值必须是整数。在nice命令的最后需要指定进程名称。

下面将通过nice命令指定top进程的优先级,示例代码如下。

[root@localhost ~]# nice -n -1 toptop - 10:32:50 up 1:28, 2 users, load average: 0.23, 0.09, 0.07Tasks: 210 total, 2 running, 208 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.3 us, 1.0 sy, 0.0 ni, 98.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 3861484 total, 1193596 free, 814500 used, 1853388 buff/cacheKiB Swap: 2097148 total, 2097148 free, 0 used. 2701124 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 9206 root 20 0 320216 6872 5376 S 0.3 0.2 0:02.97 vmtoolsd 10311 root 20 0 315460 43660 23504 S 0.3 1.1 0:05.92 X 11866 root 20 0 698660 32388 18852 S 0.3 0.8 0:02.96 gnome-terminal- 13107 root 19 -1 162012 2348 1596 R 0.3 0.1 0:00.12 top...

上述示例中,将top进程的优先级修改为1,并执行top命令,在top界面中可以看到此时top进程的优先级为1。

6.jobs

Linux系统中的进程分为前台进程与后台进程。将命令的执行过程或执行结果显示到终端中并占用终端资源的进程称为前台进程。执行过程与结果不会输入到终端,且不占用终端资源的进程称为后台进程。

执行top命令之后,使用Ctrl+Z组合键将命令在后台挂起,示例代码如下。

[root@localhost ~]# toptop - 10:45:57 up 1:41, 2 users, load average: 0.00, 0.01, 0.05Tasks: 209 total, 1 running, 208 sleeping, 0 stopped, 0 zombie%Cpu(s): 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 stKiB Mem : 3861484 total, 1192836 free, 814684 used, 1853964 buff/cacheKiB Swap: 2097148 total, 2097148 free, 0 used. 2700392 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 10311 root 20 0 315972 43916 23756 S 0.3 1.1 0:06.34 X 10846 gdm 20 0 452412 4396 3352 S 0.3 0.1 0:00.08 ibus-daemon 11094 root 20 0 3020304 195036 66544 S 0.3 5.1 0:12.05 gnome-Shell 1 root 20 0 128264 6920 4184 S 0.0 0.2 0:02.31 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:00.24 ksoftirqd/0...[1]+ 已停止 top

上述示例中可以看到,将top进程挂起到后台之后,会在下方提示top进程已经停止。其中,1表示作业号,作业也是进程,但一个作业可能有着多个关联进程。

jobs命令常用参数:

-l:显示PID

-p:只显示与作业对应的PID

-n:显示作业状态的变化

-r:只显示正在运行的作业

-s:只显示此刻停止的作业

通过jobs命令查看后台进程,示例代码如下。

[root@localhost ~]# jobs -l[1]+ 13324 停止 (信号) top

上述示例中可以看到,此时top进程在后台,但没有运行,处于挂起状态。

7.bg与fg

通过Ctrl+Z组合键将进程调入后台之后,该进程将会处于挂起状态。用户通过fg命令可以将后台的进程调回到前台执行,示例代码如下。

[root@localhost ~]# fg 1

上述示例中,1表示进程的作业号。

另外,在命令后添加“&”符号,可以将命令放置到后台执行,示例代码如下。

[root@localhost ~]# mkdir -p /book1/book2/book3 &[1] 15589[1]+ 完成 mkdir -p /book1/book2/book3

当需要将后台挂起状态的进程继续在后台执行时,可以使用bg命令,示例代码如下。

[root@localhost ~]# bg 1[1]+ top &[1]+ 已停止 top

上述示例中可以看到,输出结果中的top命令后有一个“&”符号,表示top进程在后台执行。

8.kill

kill命令是Linux系统中一款管理进程的命令,通过该命令可以向某个进程发送一个信号,使该进程改变当前状态。

kill命令所使用的参数通常为“-信号编号”,配置参数之后再指定目标进程的PID或用户名即可。另外,kill命令可以通过-l参数查看系统中的信号,示例代码如下。

[root@localhost ~]# kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+338) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+843) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+1348) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-1253) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-758) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-263) SIGRTMAX-1 64) SIGRTMAX

上述示例中,有一个常用的信号为9号SIGKILL信号,该信号能够强制终止进程。除SIGKILL信号外,下面将讲述几种其他常用信号。

SIGINT:中断进程,可通过Ctrl+C组合键实现。

SIGQUIT:退出进程,可通过Ctrl+\组合键实现。

SIGTERM:终止进程。

SIGCONT:继续执行当前挂起状态的进程。

SIGSTOP:挂起进程,可通过Ctrl+Z组合键实现。

演示kill命令的使用方式,示例代码如下。

#在后台执行top命令[root@localhost ~]# top &[1] 11920[1]+ 已停止 top#查看此刻进程[root@localhost ~]# ps PID TTY TIME CMD 11858 pts/0 00:00:00 bash 11920 pts/0 00:00:00 top 11935 pts/0 00:00:00 ps#强制终止top进程[root@localhost ~]# kill -9 11920[1]+ 已杀死 top#验证结果[root@localhost ~]# ps PID TTY TIME CMD 11858 pts/0 00:00:00 bash 11948 pts/0 00:00:00 ps
Linux进程管理工具是Linux系统中的重要组成部分,它们提供了监视、控制和优化进程的关键功能。本文介绍了一些最常用的进程管理工具,包括但不限于ps、top、kill、pgrep等等。通过这些工具,用户可以轻松地查看运行中的进程、了解它们的资源占用情况、终止不需要的进程以及查找特定进程。
了解和熟练使用这些工具对于系统管理员、开发人员和普通用户来说都是非常重要的,因为它们有助于保持系统的稳定性和性能,同时也能提高问题排查的效率。

来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

              ↓↓↓ 点个在看,无需赞赏!

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存