Linux 进程管理
查看进程
ps命令
ps aux
命令解释
- a 显示当前终端下的所有进程信息,包括其他用户的进程
- u 以用户为主的进程状态
- x 显示所有进程,不以终端机来区分
- -e:显示系统内所有的进程信息
- -l :使用长格式显示进程信息
- -f :使用完整的格式显示进程信息
显示出来的信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
- USER 启动这些进程的用户
- PID 进程的PID
- %CPU 进程占用CPU的百分比
- %MEM 进程占用内存的百分比
- VSZ 进程占用的虚拟内存大小(KB)
- RSS 进程占用的物理内存的大小(KB)
- START 该进程被触发的时间
- TIME 该进程实际使用CPU运作的时间
- COMMAND 该程序使用的指令
- STAT 该程序目前的状态,linux进程有五种基本状态:
- R 该程序目前正在工作,或者是可被运作
- S 该进程目前正在睡眠中,可被某些讯号唤醒
- T 该程序目前正在侦测或者是停止了
- Z 该进程应该已经被终止,但是其父程序却无法正常终止他,造成僵尸进程
- D 不可中断状态
- 五个基本状态后的小状态:
- < 表示进程运行在高优先级上
- N 表示进程运行在低优先级上
- L 表示进程有页面锁定在内存中
- s 表示进程是控制进程
- l 表示进程是多线程
- + 表示当前进程运行在前台
pstree命令
pstree
显示出来的信息
各个进程的树形结构
pgrep命令
- 例:匹配用户
root
下包含ssh
的最新进程的“PID、进程名和完整的命令行”
pgrep -lanu root ssh
命令解释
- -d, –delimiter
指定输出分隔符 - -l, –list-name 列出PID和进程名
- -a, –list-full 列出 PID 和完整的命令行
- -v, –inverse 否定匹配
- -w, –lightweight 列出所有 TID
- -c, –count 匹配进程的计数
- -f, –full 使用完整的进程名来匹配
- -n, –newest 选择最近开始的
- -o, –oldest 选择最初开始的
- -s, –session <SID,…> 匹配会话 ID
- -u, –euid <ID,…> 指定用户
- -x, –exact 与命令名完全匹配
注意:pgrep使用正则匹配
和ps命令一起使用
ps aux | grep ssh
top命令
top
显示出来的信息
- Tasks:
- total 总进程数
- running 正在运行的进程数
- sleeping 睡眠的进程数
- stopped 停止的进程数
- zombie 僵尸进程数
- %Cpu(s):
- us 系统用户进程使用CPU百分比
- sy 内核中的进程占用CPU百分比
- ni 用户进程空间内改变过优先级的进程占用CPU百分比
- id 空闲的CPU百分比
- wa CPU等待I/O完成的时间总量
- hi 硬中断占比
- si 软中断占比
- st 虚拟机占用物理的时间,例如物理机运行了KVM,则表示KVM占用物理机的CPU时间
- KiB Mem:
- total 物理内存总量
- free 空闲内存总量
- used 使用的物理内存总量
- buff/cache 内核缓存内存量
- KiB Swap
- total 交换分区总量
- free 空闲交换分区总量
- used 使用的交换分区总量
- cached 可利用内存总量
快捷键
- q 退出
- P 按CPU排序按CPU排序
- M 按内存排序
- T 按时间排序
- 1 显示每个内核的CPU使用率
- u/U 指定显示的用户
- h: 帮助
- -p:
top -p 进程号
,查看某个进程状态
uptime查看系统负载
uptime
显示出来的信息
对应系统时间,系统已运行时间,登录用户数,load average(分别为1分钟、5分钟、15分钟前到现在的平均值)
后台运行进程
&命令
在运行命令后面加上&:
bash test.sh &
nohup命令
nohup的方法可以使终端关闭后依旧保持运行:
nohup bash test.sh &
该程序默认输出在nohup.out文件,通过指令重定向输出文件:
nohup bash test.sh > test.log 2>&1 &
其中2>&1表示将错误输出重定向到标准输出
杀死进程
kill
显示可用的信号
kill -l
强制终止进程
kill -KILL 123456
彻底杀死进程
kill -9 进程pid
杀死指定用户的进程
kill -u test
注意:Linux的
kill
命令是向进程发送信号,kill
不是杀死的意思,-9
表示无条件退出,但由进程自行决定是否退出,这就是为什么kill -9
终止不了系统进程和守护进程的原因。
killall
killall 进程名称