Loading... ## 进程管理 进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。 ### `ps` 查看当前系统进程状态 `ps`:`process status` 进程状态 #### 基本语法 `ps aux | grep xxx` (功能描述:查看系统中所有进程) `ps -ef | grep xxx` (功能描述:可以查看子父进程之间的关系) #### 选项说明 单纯的小写是`BSD`风格,`-小写`是`UNIX`风格 | 选项 | 功能 | | ---- | ------------------------------------------ | | a | 列出带有终端的所有用户的进程 | | x | 列出当前用户的所有进程,包括没有终端的进程 | | u | 面向用户友好的显示风格 | | -e | 列出所有进程 | | -u | 列出某个用户关联的所有进程 | | -f | 显示完整格式的进程列表 | #### 功能说明 ##### `ps aux`显示信息说明 `USER`:该进程是由哪个用户产生的 ==`PID`:进程的 `ID` 号== ==`%CPU`:该进程占用 `CPU` 资源的百分比,占用越高,进程越耗费资源;== ==`%MEM`:该进程占用物理内存的百分比,占用越高,进程越耗费资源;== `VSZ`:该进程占用虚拟内存的大小,单位 `KB` `RSS`:该进程占用实际物理内存的大小,单位 `KB` `TTY`:该进程是在哪个终端中运行的。对于 `CentOS` 来说,`tty1` 是图形化终端,`tty2-tty6` 是本地的字符界面终端。`pts/0-255` 代表虚拟终端 `STAT`:进程状态。常见的状态有:`R`:运行状态、`S`:睡眠状态、`T`:暂停状态、`Z`:僵尸状态、`s`:包含子进程、`l`:多线程、`+`:前台显示、`<` :进程优先级很高、`N`:比较低的优先级 `START`:该进程的启动时间 `TIME`:该进程占用 `CPU` 的运算时间,注意不是系统时间 `COMMAND`:产生此进程的命令名 ##### `ps -ef` 显示信息说明 `UID`:用户 `ID` `PID`:进程 `ID` `PPID`:父进程 `ID` `C`:`CPU` 用于计算执行优先级的因子。数值越大,表明进程是 `CPU` 密集型运算,执行优先级会降低;数值越小,表明进程是 `I/O` 密集型运算,执行优先级会提高 `STIME`:进程启动的时间 `TTY`:完整的终端名称 `TIME`:`CPU` 时间 `CMD`:启动进程所用的命令和参数 #### 经验技巧 如果想查看进程的 `CPU` 占用率和内存占用率,可以使用 `aux`; 如果想查看进程的父进程 `ID` 可以使用 `ef`; #### 案例实操 查看`sshd`进程对应父子关系 ```bash [root@host1 ~]# ps -ef | grep sshd #由1号进程systemd启动的后台守护进程 root 1999 1 0 Apr07 ? 00:00:00 /usr/sbin/sshd -D #虚拟出的终端,以root身份远程登录 root 29143 1999 0 11:07 ? 00:00:00 sshd: root@pts/0 #输入sshd这条命令产生的进程 root 31232 29146 0 11:47 pts/0 00:00:00 grep --color=auto sshd ``` 查看进程状态 ```bash [root@host1 ~]# systemctl status sshd ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2022-04-07 17:12:18 CST; 2 weeks 0 days ago Docs: man:sshd(8) man:sshd_config(5) Main PID: 1999 (sshd) CGroup: /system.slice/sshd.service └─1999 /usr/sbin/sshd -D Apr 21 16:56:39 host1 sshd[5412]: Bad protocol version identification ... ... ``` ### `kill`终止进程 #### 基本语法 `kill [选项] 进程号 `(功能描述:通过进程号杀死进程) `killall 进程名称 `(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用) #### 选项说明 | 选项 | 功能 | | ---- | -------------------- | | -9 | 表示强迫进程立即停止 | #### 案例实操 ##### 杀死进程 ```bash [root@host1 ~]# ps -ef | grep sshd root 1999 1 0 Apr07 ? 00:00:00 /usr/sbin/sshd -D root 9709 29146 0 15:18 pts/0 00:00:00 grep --color=auto sshd root 29143 1999 0 11:07 ? 00:00:00 sshd: root@pts/0,pts/1 [root@host1 ~]# kill 29143 SSH 121.37.133.169: session closed 按任意键重新连接 ``` ##### 通过进程名称杀死进程 ```bash [root@host1 ~]# killall sshd ``` ### `pstree` 查看进程树 #### 基本语法 `pstree [选项]` #### 选项说明 | 选项 | 功能 | | ---- | ------------------ | | -p | 显示进程的 PID | | -u | 显示进程的所属用户 | #### 案例实操 ##### 显示进程 `pid` ```bash [root@host1 ~]# pstree -p ``` ##### 显示进程所属用户 ``` [root@host1 ~]# pstree -u ``` ### `top`实时监控系统进程状态 #### 基本命令 `top [选项]` #### 选项说明 | 选项 | 功能 | | ------- | ------------------------------------------------------------ | | -d 秒数 | 指定 top 命令每隔几秒更新。默认是 3 秒在 top 命令的交互模式当中可以执行的命令 | | -i | 使 top 不显示任何闲置或者僵死进程 | | -p | 通过指定监控进程 ID 来仅仅监控某个进程的状态。 | #### 操作说明 | 操作 | 功能 | | ---- | ------------------------------- | | P | 以 CPU 使用率排序,默认就是此项 | | M | 以内存的使用率排序 | | N | 以 PID 排序 | | q | 退出 top | #### 查询结果字段解释 ##### 第一行信息为任务队列信息 | 内容 | 说明 | | ------------------------------ | ------------------------------------------------------------ | | 12:26:46 | 系统当前时间 | | up 1 day, 13:32 | 系统的运行时间,本机已经运行 1 天13 小时 32 分钟 | | 2 users | 当前登录了两个用户 | | load average: 0.00, 0.00, 0.00 | 系统在之前 1 分钟,5 分钟,15 分钟的平均负载。一般认为小于 1 时,负载较小。如果大于1,系统已经超出负荷。 | ##### 第二行为进程信息 | Tasks: 95 total | 系统中的进程总数 | | --------------- | ------------------------------------------ | | 1 running | 正在运行的进程数 | | 94 sleeping | 睡眠的进程 | | 0 stopped | 正在停止的进程 | | 0 zombie | 僵尸进程。如果不是 0,需要手工检查僵尸进程 | ##### 第三行为 CPU 信息 | Cpu(s): 0.1%us | 用户模式占用的 CPU 百分比 | | ----------------------- | ------------------------------------------------------------ | | 0.1%sy | 系统模式占用的 CPU 百分比 | | 0.0%ni | 系统模式占用的 CPU 百分比 | | 99.7%id | 空闲 CPU 的 CPU 百分比 | | 0.1%wa | 等待输入/输出的进程的占用 CPU 百分比 | | 0.0%hi | 硬中断请求服务占用的 CPU 百分比 | | 0.1%si | 软中断请求服务占用的 CPU 百分比 | | 0.0%st st(Steal time) | 虚拟时间百分比。就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比。 | ##### 第四行为物理内存信息 | Mem: 625344k total | 物理内存的总量,单位 KB | | ------------------ | ------------------------------------------------------------ | | 571504k used | 已经使用的物理内存数量 | | 53840k free | 空闲的物理内存数量,我们使用的是虚拟机,总共只分配了 628MB 内存,所以只有 53MB 的空闲内存了 | | 65800k buffers | 作为缓冲的内存数量 | ##### 第五行为交换分区(swap)信息 | Swap: 524280k total | 交换分区(虚拟内存)的总大小 | | ------------------- | ---------------------------- | | 0k used | 已经使用的交互分区的大小 | | 524280k free | 空闲交换分区的大小 | | 409280k cached | 作为缓存的交互分区的大小 | #### 案例实操 ```bash [root@host1 ~]# top -d 1 [root@host1 ~]# top -i [root@host1 ~]# top -p 2575 ``` 执行上述命令后,可以按 `P、M、N`对查询出的进程结果进行排序。 ### `netstat` 显示网络状态和端口占用信息 #### 基本语法 `netstat -anp | grep 进程号` (功能描述:查看该进程网络信息) `netstat –nlp | grep 端口号` (功能描述:查看网络端口号占用情况) #### 选项说明 | 选项 | 功能 | | ---- | ---------------------------------------------------- | | -a | 显示所有正在监听(listen)和未监听的套接字(socket) | | -n | 拒绝显示别名,能显示数字的全部转化成数字 | | -l | 仅列出在监听的服务状态 | | -p | 表示显示哪个进程在调用 | #### 案例实操 ##### 通过进程号查看`sshd`进程的网络信息 ```bash [root@host1 ~]# netstat -anp | grep sshd tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1999/sshd tcp 0 52 192.168.0.86:22 115.193.140.152:16917 ESTABLISHED 9806/sshd: root@pts tcp6 0 0 :::22 :::* LISTEN 1999/sshd unix 3 [ ] STREAM CONNECTED 17967 1999/sshd unix 2 [ ] DGRAM 422233 9806/sshd: root@pts ``` ##### 查看某端口号是否被占用 ```bash [root@host1 ~]# netstat -nltp | grep 22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1999/sshd tcp6 0 0 :::22 :::* LISTEN 1999/sshd ``` 最后修改:2022 年 04 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏