今天给伙伴们分享一下Linux 常用进程命令介绍,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、ps 命令
1、命令介绍
-
ps 命令有两种不同的语法风格 —— BSD 与 UNIX 两种风格。新手常常对这两种形式产生误解,因此我们有必要在这里作一个简单的说明:
-
ps aux 与 ps -aux 是不同的,例如 -u 参数表示打印进程的 uid,而参数 u 表示显示进程的详细信息。
-
(1)BSD 格式 —— 参数前面不加 -
ps aux
-
(2)UNIX/LINUX 格式 —— 参数前面通常要加 -
ps -aux
-
2、ps 语法格式
ps [options] [--help]
3、常用的参数
-
参数-a:显示当前终端机下的所有程序
-
参数-u:已用户为主的格式来显示程序状况
-
参数-x:显示所有进程,不以终端机来区分
-
参数-o:指定显示信息的字段
-
参数–sort :按指定的字段排序
-
参数-ef:查看进程的父子关系
-
参数-e: 显示所有进程
-
参数-l: 长格式显示
-
参数-f: 完整格式
2、ps常用的选项组合是
1、ps 常用参数 ps -axu
[[email protected] ~]# ps -axu | more
-
注!!!:最后一列[xxxx] 使用方括号括起来的进程是内核态的进程。没有括起来的是用户态进程。
-
上面的参数输出每列含意:
USER: 启动这些进程的用户
PID: 进程的ID
%CPU:进程占用的CPU百分比;
%MEM:占用内存的百分比;
VSZ:进程占用的虚拟内存大小(单位:KB)
RSS:进程占用的物理内存大小(单位:KB)
STAT:该程序目前的状态;
R :该程序目前正在运行,或者是可被运行;
S :该程序目前正在睡眠当中 (可说是 idle 状态啦!),但可被某些讯号(signal) 唤醒。
T :该程序目前正在侦测或者是停止了;
Z :该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态
D 不可中断状态.
- 5个基本状态后,还可以加一些字母,比如:Ss、R+,如下图:
- 它们含意如下::
<: 表示进程运行在高优先级上
N: 表示进程运行在低优先级上
L: 表示进程有页面锁定在内存中
s: 表示进程是控制进程
l: 表示进程是多线程的
+: 表示当前进程运行在前台
START:该 process 被触发启动的时间;
TIME :该 process 实际使用 CPU 运作的时间。
COMMAND:该程序的实际指令
例1:查看进程状态
[[email protected] ~]# vim a.txt
- 在另一个终端执行:
[[email protected] ~]# ps -aux | grep a.txt # 查看状态 S表示睡眠状态, + 表示前台
root 4435 0.0 0.2 151752 5292 pts/1 S+ 20:52 0:00 vim a.txt
root 4661 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00 grep --color=auto a.txt
- 在vim a.txt 这个终端上 按下:ctrl+z
[1]+ 已停止 vim a.txt
- 在另一个终端执行:
[[email protected] ~]# ps -aux | grep a.txt # 查看状态 T表示停止状态
root 4435 0.0 0.2 151752 5292 pts/1 T 20:52 0:00 vim a.txt
root 4675 0.0 0.0 112676 996 pts/0 S+ 21:05 0:00 grep --color=auto a.txt
注意!!!
-
ctrl-c 是发送 SIGINT 信号,终止一个进程
-
ctrl-z 是发送 SIGSTOP信号,挂起一个进程。将作业放置到后台(暂停) 前台进程收到这些信号,就会采取相应动作。
-
ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF。代表输入完成或者注销
-
在shell中,ctrl-d表示退出当前shell.
例2:D 不可中断状态
[[email protected] ~]# tar -zcvf usr-tar.gz /usr/ #把/usr 目录打包成usr-tar.gz
- 在另一个终端不断查看状态,由S+,R+变为D+
2、ps常用的参数:ps -ef
- -e 显示所有进程
- -f 显示完整格式输出
- 包含的信息如下:
UID: 启动这些进程的用户,程序被该UID所拥有
PID: 该进程的ID
PPID: 该进程的父进程的ID
C: 该进程生命周期中的CPU 使用资源百分比
STIME: 进程启动时的系统时间
TTY: 表明进程在哪个终端设备上运行。如果显示 ?表示与终端无关,这种进程一般是内核态进程。另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等,则表示运行在虚拟终端上的进程。
TIME: 运行进程一共累计占用的CPU时间
CMD: 启动的程序名称
- 例1:测试CPU使用时间。
[root@localhost ~]# dd if=/dev/zero of=~/zero.txt count=10 bs=100M #造数据,if 数据源 of 写入目标文件 count 数据块数量 bs 数据块大小。
[[email protected] ~]# tar -zcvf usr-tar.gz /usr/
[root@localhost ~]# ps -axu | grep tar
注意!!!
-
ps aux 是用BSD的格式来显示进程。
-
ps -ef 是用标准的Unix格式显示进程
二、Uptime 查看CPU负载
[root@localhost ~]# uptime
13:22:30 up 20days, 2 users, load average: 0.76, 0.60, 0.98
弹出消息含意如下:
-
任务队列的平均长度是什么?
-
大厅排队买票:
-
这时队列是4:
-
cpu队列数为3时,如图:
-
例1:找出前当系统中,CPU负载过高的服务器?
-
1 核 1-2 最优状态 2-3 3-4
-
-
服务器1:load average: 0.15, 0.08, 0.01 1核
-
服务器2:load average: 4.15, 6.08, 6.01 1核
-
服务器3:load average: 10.15, 10.08, 10.01 4核
-
-
**答案:**服务器2
-
如果服务器的CPU为1核心,则load average中的数字 >=1 负载过高,如果服务器的CPU为4核心,则load average中的数字 >=4 负载过高。
-
**经验:**单核心,1分钟的系统平均负载不要超过3,就可以,这是个经验值。
-
如下图:1人只能买1张票,排第四的人可能会急。所以我们认为超过3就升级CPU。
三、Top 动态查看进程
- top命令可以对所有正在运行的进程和系统负荷提供不断更新的概览信息,包括系统负载、CPU利用分布情况、内存使用、每个进程的资源占用情况等信息
1、命令格式
top [选项] [-] [d] [p] [q] [c] [C] [S] [s] [n]
- d 指定每两次屏幕信息刷新之间的时间间隔;
- p 通过指定监控进程ID来仅仅监控某个进程的状态;
- q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行;
- S 指定累计模式;
- s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险;
- i 使top不显示任何闲置或者僵死进程;
- c 显示整个命令行而不只是显示命令名;
比如:
top 每隔5秒显式所有进程的资源占用情况;
top -d 2 每隔2秒显式所有进程的资源占用情况;
top -c 每隔5秒显式进程的资源占用情况,并显示进程的命令行参数(默认只有进程名);
top -p 12345 -p 6789 每隔5秒显示pid是12345和pid是6789的两个进程的资源占用情况;
top -d 2 -c -p 123456 每隔2秒显示pid是12345的进程的资源使用情况,并显式该进程启动的
[[email protected] ~]# top # top弹出的每行信息含意如下:
2、第一行内容
和uptime弹出的信息一样
3、第二、三行内容
- 进程和CPU的信息
- 当有多个CPU时,这些内容可能会超过两行。
4、内存信息(第四五行)
- 内容如下:
- 注:如果swap分区,被使用,那么你的内存不够用了。
5、第7行进程信息
6、top 快捷键
默认3s刷新一次,按s修改刷新时间
按空格 :立即刷新。
q:退出
P:按CPU排序
M:按内存排序
T:按时间排序
p: 进程pid,查看某个进程状态
数字键1:显示每个内核的CPU使用率,展示cpu数量,再按下,就收起来了
u/U:指定显示的用户
h:帮助
-
例1:运行top,依次演示一下top的快捷键,让大家看一下效果
-
例2:使用TOP动态只查看某个或某些进程的信息,找到进程PID
[root@localhost ~]# vim a.txt
[root@localhost ~]# ps axu | grep vim
root 9667 0.0 0.2 143620 3344 pts/1 S<+ 19:15 0:00 vim a.txt
[root@localhost ~]# top -p 9667
实战1:找出系统中使用CPU最多的进程
- 运行top , 找出使用CPU最多的进程 ,按大写的P,可以按CPU使用率来排序显示
互动:在linux系统中一个进程,最多可以使用100%cpu对吗? 取决于核心数 1c 2c 3c
- 如下图,可以看到dirtycow(脏牛漏洞,用于提权) 进程使用196.8%。
-
这是你第一次看见:
-
如果你的4核心的cpu,你可以运行400%
四、lsof 命令
- lsof: 查看进程打开的文件
1、语法格式:
lsof 【option】
- lsof 选项
[[email protected] ~]# lsof /var/log/messages
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
abrt-watc 984 root 4r REG 8,5 2566657 34188115 /var/log/messages
rsyslogd 1381 root 6w REG 8,5 2566657 34188115 /var/log/messages
- COMMAND :进程的名称
- PID:进程号
- USER :进程的所有者
- FD :文件的描述符
- 0–标准输入
- 1–标准输出
- 2—标准错误
- u:文件被打开处于读写模式
- r:文件被打开处于只读模式
- w:文件被打开处于写入模式
- TYPE :文件类型,REG表示普通文件
- DEVICE:指定磁盘的名称
- SIZE/OFF:文件的大小
- NODE:索引节点
- NAME:文件名称
参数:-c 显示指定的进程名打开的文件
[[email protected] ~]# lsof -c sshd
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1379 root cwd DIR 8,5 284 64 /
sshd 1379 root rtd DIR 8,5 284 64 /
sshd 1379 root txt REG 8,5 852856 17569122 /usr/sbin/sshd
参数:-p 显示指定的进程号打开的文件
[[email protected] ~]# lsof -p 22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
md 22 root cwd DIR 8,5 284 64 /
md 22 root rtd DIR 8,5 284 64 /
md 22 root txt unknown /proc/22/exe
参数:-i 通过监听指定的协议,端口,主机等信息
[[email protected] ~]# lsof -i #查看所有进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1026 rpc 6u IPv4 19753 0t0 UDP *:sunrpc
rpcbind 1026 rpc 7u IPv4 19794 0t0 UDP *:726
rpcbind 1026 rpc 8u IPv4 19795 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1026 rpc 9u IPv6 19796 0t0 UDP *:sunrpc
rpcbind 1026 rpc 10u IPv6 19797 0t0 UDP *:726
rpcbind 1026 rpc 11u IPv6 19798 0t0 TCP *:sunrpc (LISTEN)
sshd 1379 root 3u IPv4 21367 0t0 TCP *:ssh (LISTEN)
sshd 1379 root 4u IPv6 21376 0t0 TCP *:ssh (LISTEN)
master 1472 root 13u IPv4 21899 0t0 TCP localhost:smtp (LISTEN)
master 1472 root 14u IPv6 21900 0t0 TCP localhost:smtp (LISTEN)
sshd 1677 root 3u IPv4 24031 0t0 TCP 批量管理服务器:ssh->10.0.0.1:51165 (ESTABLISHED)
[[email protected] ~]# lsof -i tcp #查看所有tcp网络连接的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1026 rpc 8u IPv4 19795 0t0 TCP *:sunrpc (LISTEN)
rpcbind 1026 rpc 11u IPv6 19798 0t0 TCP *:sunrpc (LISTEN)
sshd 1379 root 3u IPv4 21367 0t0 TCP *:ssh (LISTEN)
sshd 1379 root 4u IPv6 21376 0t0 TCP *:ssh (LISTEN)
master 1472 root 13u IPv4 21899 0t0 TCP localhost:smtp (LISTEN)
master 1472 root 14u IPv6 21900 0t0 TCP localhost:smtp (LISTEN)
sshd 1677 root 3u IPv4 24031 0t0 TCP 批量管理服务器:ssh->10.0.0.1:51165 (ESTABLISHED)
[[email protected] ~]# lsof -i:22 #查看端口为22的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1379 root 3u IPv4 21367 0t0 TCP *:ssh (LISTEN)
sshd 1379 root 4u IPv6 21376 0t0 TCP *:ssh (LISTEN)
sshd 1677 root 3u IPv4 24031 0t0 TCP 批量管理服务器:ssh->10.0.0.1:51165 (ESTABLISHED)
五、进程pid文件
[[email protected] ~]# cd /var/run
[[email protected] ~]# cat /var/run/httpd/httpd.pid
12265
如果有版帮助,帮忙免费的关注一下**公众号「想吃西红柿」「云原生运维实战派」**后续会有更多实用的运维技术分享给伙伴们,您的关注就是我最大的成就。