进程管理-查看进程

ps 命令

ps aux:查看系统中所有进程,使用 BSD 操作系统格式,注意 aux 前面没有 -

  1. [root@iZwz91sneajs2ji49vo4wxZ routes]# ps aux
  2. USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  3. root 1 0.0 0.0 125780 3136 ? Ss 603 17:55 /usr/lib/systemd/systemd --system
  4. root 2 0.0 0.0 0 0 ? S 603 0:00 [kthreadd]
  5. root 3 0.0 0.0 0 0 ? S 603 1:10 [ksoftirqd/0]
  6. root 5 0.0 0.0 0 0 ? S< 603 0:00 [kworker/0:0H]
  7. root 7 0.0 0.0 0 0 ? S 603 0:12 [migration/0]
  8. root 8 0.0 0.0 0 0 ? S 603 0:00 [rcu_bh]
  9. root 9 0.0 0.0 0 0 ? S 603 34:26 [rcu_sched]
  10. root 10 0.0 0.0 0 0 ? S< 603 0:00 [lru-add-drain]
  11. root 11 0.0 0.0 0 0 ? S 603 0:17 [watchdog/0]
  12. root 12 0.0 0.0 0 0 ? S 603 0:09 [watchdog/1]
  13. root 741 0.0 0.0 110104 132 tty1 Ss+ 603 0:00 /sbin/agetty --noclear tty1 linux
  14. root 742 0.0 0.0 110104 132 ttyS0 Ss+ 603 0:00 /sbin/agetty --keep-baud 115200,38
  15. root 6462 0.0 0.0 157320 6068 ? Ss 13:41 0:00 sshd: root@pts/0
  16. root 6500 0.0 0.0 115684 2184 pts/0 Ss 13:41 0:00 -bash
  17. ...

各列含义:
USER:该进程是哪个用户产生的
PID:该进程 ID
%CPU:该进程 CPU 占用率
%MEM:该进程物理内存占用率
VSZ:该进程占用虚拟内存大小
RSS:该进程实际占用物理内存大小
TTY:该进程是哪个终端中运行的。tty1-tty7 代表本地控制台终端,tty1-tty6 是本地命令行终端,tty7 是图形界面终端,pts/0-255 代表虚拟终端
STAT:进程状态。R运行,S睡眠,T停止状态,s包含子进程,+位于后台
START:进程启动时间
TIME:该进程占用 CPU 的运算时长
COMMAND:产生此进程的启动命令

pstree 命令

pstree:查看进程树

  1. [root@iZwz91sneajs2ji49vo4wxZ routes]# pstree
  2. systemd─┬─AliSecGuard───6*[{AliSecGuard}]
  3. ├─AliYunDun───23*[{AliYunDun}]
  4. ├─AliYunDunUpdate───3*[{AliYunDunUpdate}]
  5. ├─BT-Panel───2*[{BT-Panel}]
  6. ├─BT-Task───7*[{BT-Task}]
  7. ├─CmsGoAgent.linu─┬─exe───12*[{exe}]
  8. └─5*[{CmsGoAgent.linu}]
  9. ├─2*[agetty]
  10. ├─aliyun-service───2*[{aliyun-service}]
  11. ├─atd
  12. ...

参数:
-p:显示进程 id
-u:显示用户

top 命令

top:查看系统健康状态利器
Linux进程管理 - 图1
上图含义:
top - 16:42:08 up 130 days, 2:56, 1 user, load average: 0.10, 0.09, 0.11

内容 含义
top - 16:42:08 当前系统时间是 16:42:08
up 130 days, 2:56 当前服务器已开机 130 天 2 小时 51 分
1 user 当前有 1 个用户连接了服务器
load average: 0.10, 0.09, 0.11 服务器 1 分钟之前平均负载 0.10,5 分钟之前平均负载 0.09,15 分钟之前平均负载 0.11,平均负载指的是 CPU 占用率,数值跟 CPU 核数有关

Tasks: 137 total, 1 running, 136 sleeping, 0 stopped, 0 zombie

内容 含义
Tasks: 137 total 系统中有 137 个进程
1 running 1 个进程正在运行
136 sleeping 136 个睡眠进程
0 stopped 0 个停止的进程
0 zombie 0 个僵尸进程

%Cpu(s): 1.5 us, 0.8 sy, 0.0 ni, 97.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st

内容 含义
%Cpu(s): 1.5 us 用户模式占用的 CPU 百分比为 1.5%
0.8 sy 系统模式占用的 CPU 百分比为 0.8%
0.0 ni 改变过优先级的用户进程占用的 CPU 百分比为 0.0%
97.7 id 空闲的 CPU 百分比为 97.7%
0.0 wa 等待输入/输出的进程占用 CPU 百分比为 0.0%
0.0 hi 硬中断请求服务器占用的 CPU 百分比为 0.0%
0.0 si 软中断请求服务器占用的 CPU 百分比为 0.0%
0.0 st st(Steal time)虚拟时间百分比,当使用虚拟机时,虚拟机等待实际 CPU 的时间百分比为 0.0%

参数:
-d:隔几秒刷新一次,默认 3 秒
-b:使用批处理模式输出。一般和 -n 一起使用
-n:指定 top 命令的执行次数,一般和 -b 一起使用

交互功能:
?h:显示交互模式的帮助
P:以 CPU 使用率排序,默认是此选项
M:以内存的使用率排序
N:以 PID 排序
q:退出

进程管理-杀死进程

kill 命令

kill [信号] 进程id ...:一般用于杀死进程
kill -9 pid ...:强制杀死进程,支持多个
kill -1 pid ...:重启进程,平滑重启服务,用于 Nginx 或 Apache 等

killall 命令

killall [选项][信号] 进程名
选项:
-i:交互式,询问是否要杀死某个进程
-I:忽略进程名的大小写
killall -9 httpd:杀死所有 Apache 进程
killall -i -9 httpd:交互式杀死所有 Apache 进程

  1. [root@iZwz91sneajs2ji49vo4wxZ ~]# killall -i -9 php
  2. 信号 php(2927) ? (y/N) N
  3. 信号 php(2928) ? (y/N) N
  4. 信号 php(2929) ? (y/N) N
  5. [root@iZwz91sneajs2ji49vo4wxZ iep-test.ca163.com]# ps -ef|grep iep
  6. root 6476 6237 5 20:01 pts/1 00:00:30 java -jar target/iep.jar
  7. root 6718 6237 1 20:03 pts/1 00:00:04 java -jar target/iep.jar
  8. root 7756 6237 0 20:10 pts/1 00:00:00 grep --color=auto iep
  9. [root@iZwz91sneajs2ji49vo4wxZ iep-test.ca163.com]# killall -i -9 java
  10. 信号 java(6476) ? (y/N) y
  11. 信号 java(6718) ? (y/N) y
  12. 信号 java(16450) ? (y/N) n
  13. [1]- 已杀死 java -jar target/iep.jar
  14. [2]+ 已杀死 java -jar target/iep.jar

w 命令

查看所有终端用户

  1. [root@iZwz91sneajs2ji49vo4wxZ ~]# w
  2. 12:18:13 up 6 days, 22 min, 3 users, load average: 0.00, 0.04, 0.09
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. root pts/0 119.33.33.142 11:53 5.00s 0.01s 0.00s w
  5. root pts/1 119.33.33.142 12:00 15:01 33.25s 0.00s -bash
  6. root pts/2 119.33.33.142 12:15 5.00s 0.00s 0.00s -bash

pkill 命令

pkill [选项][信号] 进程名:功能与 killall 相似
选项:
-t:按照终端号踢出 linux 用户,只有 root 拥有些权限
终端1(把终端 2 踢下线):

  1. [root@iZwz91sneajs2ji49vo4wxZ ~]# w
  2. 12:20:44 up 6 days, 24 min, 3 users, load average: 0.04, 0.04, 0.08
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. root pts/0 119.33.33.142 11:53 4.00s 0.01s 0.00s w
  5. root pts/1 119.33.33.142 12:00 17:32 33.49s 0.00s -bash
  6. root pts/2 119.33.33.142 12:20 12.00s 0.00s 0.00s -bash
  7. [root@iZwz91sneajs2ji49vo4wxZ ~]# pkill -t -9 pts/2

终端2(被踢下线):

  1. [root@iZwz91sneajs2ji49vo4wxZ ~]# w
  2. 12:20:38 up 6 days, 24 min, 3 users, load average: 0.05, 0.04, 0.09
  3. USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  4. root pts/0 119.33.33.142 11:53 22.00s 0.01s 0.01s -bash
  5. root pts/1 119.33.33.142 12:00 17:26 33.46s 0.00s -bash
  6. root pts/2 119.33.33.142 12:20 6.00s 0.00s 0.00s w
  7. [root@iZwz91sneajs2ji49vo4wxZ ~]# Connection to 120.77.155.61 closed.

进程优先级

Linux 是一个多用户、多任务的操作系统,但是 CPU 在同一个时钟周期只能运算一个指令。进程优先级在一定程序上决定了每个进程运行的先后顺序,一般都不用去修改进程优先级,修改的作用不大,只有硬件开发可能需要修改优先级
ps -le | more 查看优先级信息

  1. [root@iZwz91sneajs2ji49vo4wxZ ~]# ps -le | more
  2. F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
  3. 4 S 0 1 0 0 80 0 - 12936 ep_pol ? 00:01:12 systemd
  4. 1 S 0 2 0 0 80 0 - 0 kthrea ? 00:00:00 kthreadd
  5. 1 S 0 4 2 0 60 -20 - 0 worker ? 00:00:00 kworker/0:0H
  6. 1 S 0 6 2 0 80 0 - 0 smpboo ? 00:00:06 ksoftirqd/0
  7. 1 S 0 7 2 0 -40 - - 0 smpboo ? 00:00:02 migration/0
  8. 1 S 0 8 2 0 80 0 - 0 rcu_gp ? 00:00:00 rcu_bh
  9. 1 S 0 9 2 0 80 0 - 0 rcu_gp ? 00:01:41 rcu_sched
  10. 1 S 0 10 2 0 60 -20 - 0 rescue ? 00:00:00 lru-add-drain
  11. 5 S 0 11 2 0 -40 - - 0 smpboo ? 00:00:01 watchdog/0
  12. 5 S 0 12 2 0 -40 - - 0 smpboo ? 00:00:00 watchdog/1
  13. 1 S 0 13 2 0 -40 - - 0 smpboo ? 00:00:01 migration/1
  14. 1 S 0 14 2 0 80 0 - 0 smpboo ? 00:00:04 ksoftirqd/1
  15. 1 S 0 16 2 0 60 -20 - 0 worker ? 00:00:00 kworker/1:0H

PRI 代表 PriorityNI 代表 Nice,这两个数值都代表进程优先级,数值越小优先级越高
用户只能修改 NI 的值,NI 的范围是 -20 到 19
普通用户调整的 NI 值的范围是 0 到 19,而且只能调整自己的进程
普通用户只能调高 NI 的值,不能降低
root 用户才能设定进程 NI 值为负值,而且可以调整所有用户的进程
PRI(最终值)= PRI(原始值)+ NI,只有 PRI 最终值才代码进程的优先级