进程管理的操作命令
为了管理这些linux进程,用户应该能够:
查看所有运行中的进程
查看进程消耗资源
定位个别进程并且对其执行指定操作
改变进程的优先级
杀死指定进程
限制进程可用的系统资源等
linux提供了许多命令来让用户来高效掌控上述的操作;
1.pstree - 显示进程的树状图来展示进程间关系
linux中,每一个进程都是由其父进程创建的。此命令以可视化方式显示进程,通过显示进程的树状 图来展示进程间关系。如果指定了pid了,那么树的根是该pid,不然将会是init(pid: 1)。
2.ps -
Linux 中最基础的浏览系统中的进程的命令。能列出系统中运行的进程,包括进程号、命令、CPU使用量、内存使用量等。下述选项可以得到更多有用的消息。
三种风格的选项options:
UNIX options, which may be grouped and must be preceded by a dash.
BSD options, which may be grouped and must not be used with a dash.
GNU long options, which are preceded by two dashes.
BSD-style
a:显示所有与终端相关的进程
x:显示所有与终端无关的进程
u:显示发起进程的用户的名称
常用三者组合,aux
显示结果:
其显示的结果各字段的含义:
USER:进程所有者
PID:进程标识符
%CPU:进程所占CPU处理时间的百分比
%MEM:进程占用内存百分比
VSZ:虚拟内存集(可交换内存集)
RSS:常驻内存集
TTY:进程与哪个终端相关,标识与终端无关
STAT:进程的状态,如下:
R:running正在运行的进程;
S:interuptible sleep,可中断睡眠状态;
D:uninteruptible sleep,不可中断睡眠状态;Disk Block;
T:Trace/STOPPED:被跟踪/已停止
Z:Zombie,僵死态 父进程已消失
+: 表示是一个前台进程;
l:包含多线程的进程
<: 高优先级进程
N:低优先级进程
s:Session leader 有子进程的父进程;
START:进程开始执行时的时间戳
TIME:进程累计的cpu占用时间;
COMMAND:启动进程的命令行参数
UNIX风格的选项:
-e:显示所有进程
-f:显示完整格式的进程信息
-F:与-f几乎相同
常用选项组合:-ef
其结果如下:
虽然跟ps aux所显示的结果类似,但也有不同之处:
PPID:父进程的pid
C:进程占用的CPU时间百分比
3.pgrep, pkill - look up or signal processes based on name and other attributes
根据进程名称或者其他属性查看进程或向进程发送信号
pgrep [opts] pattern
常用选项:
-u uid:显示进程的有效用户
-U uid:显示进程的真实用户
-t TERM:显示与指定终端相关的进程
-l:显示进程名称和PID
-a:显示进程的完整参数
4.pidof -- find the process ID of a running program。
显示指定进程的PID
5.top - display Linux processes
这个命令显示的内容还是毕竟详尽的:
首先是top的首部:
top - 16:47:00 up 7:53, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 393 total, 1 running, 392 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.2 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1001360 total, 542116 free, 201176 used, 258068 buff/cache
KiB Swap: 2097148 total, 2097148 free, 0 used. 599600 avail Mem
第一行:uptime信息
当前系统时间 系统运行时长 当前登录系统的用户总数 过去的1,5,15分钟三个时间段的在CPU上等待运行的进程队列的平均长度
第二行:系统中运行的进程总数 正在运行的 睡眠状态的 已停止的 僵死态的
第三行:CPU的占用百分比
us:user space 用户空间的进程占用的cpu时间的百分比
sy:system 内核空间的内核进程占用的cpu时间百分比
ni:使用nice值调整了进程优先级之后,额外多占用的cpu时间的百分比
id:idle,cpu空闲时间的百分比,一般为10-20%;
wa:waiting,等待IO完成所消耗的CPU时间的百分比
hi:hardware interrupting,处理硬件中断事件所消耗的CPU时间的百分比
si:software interrupting,处理软件中断事件所消耗的CPU时间的百分比
st:stolen,被虚拟化程序等偷走的cpu时间的百分比
第四行:以KB为单位显示物理内存空间的使用情况
total:物理内存的总大小
free:空闲的物理内存空间大小
used:已经被使用的物理内存空间大小
buff/cache:缓冲区和缓存区所消耗的物理内存大小;随时可以回收
第五行:以KB为单位显示交换分区SWAP空间的使用情况
‘total‘ ‘used‘ ‘free‘ ‘avail Mem‘
首部之后的内容 就类似与ps aux了
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
top是前台进程,具有交互式命令如下:
1 显示/隐藏CPU核心信息
P 根据CPU占用百分比排序
M 根据物理内存占用百分比进行排序
T 根据累计CPU占用时间进行排序
l 关闭/显示uptime信息
t 关闭/显示第二三行信息
m 关闭/显示第四五行信息
q 退出top交互模式
s 修改top的刷新时间间隔
k 终止指定PID的进程
常用选项:
-d #:相当于交互模式里的s,指定刷新的时间间隔;默认3.0s
-b:按照批次显示进程信息
-n #:与-b一起使用,标识显示多少批次
6.vmstat - 报告虚拟内存的统计信息
用法:vmstat [options] [delay [count]]
options:
-s 统计内存使用的相关信息 /proc/meminfo文件中提取的信息;
delay:按照默认是s为时间,重复执行这个命令
count:指定要执行vmstat的次数
输出信息的格式如下:
各字段含义如下:
procs
r running运行中
b block阻塞态
memory
swpd
free
buff
cache
swap
si swap in 页框进入swap空间
so swapout swap空间拿出去到页框
io
bi blockin 加载到内存过程
bo blockout 内存保存数据到块设备
system
in interrupt 中断
cs 上下文切换
cpu
us userspace
sy
id idle
wa waiting
st stolen
7.pmap - report memory map of a process 进程映射表
用法:pmap [options] pid [...] 参考/proc/DIGIT(pid)/maps
要修改proc目录下PID目录下的文件 不能用vim,而是echo > 重定向的方式
options:-x,--extended : 显示一些扩展信息,如RSS Dirty;
8.htop,glances dstat
htop - 增强版top,个人认为格式比top更美观
用法:htop [-dChusv]
选项:
-d #:htop刷新的时间间隔
-u USERNAME:显示指定用户的进程
-s COLUME_NAME:根据指定字段进行排序
交互式命令:
l:显示指定进程打开的文件列表
t/F5:显示进程树结构
a:选定的进程绑定到某指定的CPU核;
glances - A cross-platform curses-based monitoring tool
用法:glances [-bdhmn1] [-t refresh] [-f file] [-o output]
常用选项:
-b:K Byte为单位,显示网卡的数据速率
-d 关闭磁盘的IO模块
-m 关闭Mount模块
-n 关闭Network模块
-1 单独显示每颗CPU核心的数据统计信息
-t # 设定刷新时间间隔
-o {HTML|CSV} 为输出数据指定输出的格式
-f /PATH/TO/OUTPUT_DIR 指定输出文件的路径,默认输出文件名为glances.html或者glances.csv
此命令 可以工作于C/S模式下;
S:服务器模式
glances -s -B IPADDR
这里的IPADDR是服务器本地的某个IP地址;
C:客户端模式
glances -c IPADDR
这里的IPADDR是远程服务器指定监听的IP地址
进程之间是可以通信的,但是不能随意通信;linux内核管理进程方式--单独管理;
IPC--Inter-Process Communication
1.signal
2.semaphore
3.shared memory(SHM)共享内存
4.socket
dstat:
用法:dstat [-afv] [options..] [delay [count]]
常用选项:
-c --cpu
-d --disk
-n --net
-g --paging
-y --sys
以上五个为默认选项
--tcp
--udp
“杀死”终止进程的命令 -- kill pkill kilall
1.kill - teminate a process
用法 kill [-s signal] pid..
查看信号signal的信息: kill -l
有效信号的标识方法
1.使用数字编码
2.完整名称
3.简写名称,即不包含‘SIG’的其余部分
常用信号:
1)SIGHUP 无需关闭对应进程而让其重新选取自身的配置文件
2)SIGINT 一般用于终止正在运行的前台进程 相当于Ctrl+C
9)SIGKILL 没有任何预兆的终止正在运行的进程,‘残暴值‘五颗星!
15)SIGTERM 默认信号,终止正在运行的进程,但允许进程‘料理后事‘
18)SIGCONT 让转入后台的进程继续运行
19)SIGSTOP 让进程转入后台并停止运行
2.killall - kill processes by name
用法:killall PRO_NAME
3.pkill -
根据模式匹配(PATTERN)来进行终止进程;可能会误终止其他进程
进程作业管理命令:
jobs,bg,fg
前面介绍到,进程有前台进程和后台进程,那么如何让作业工作与后台?
1.对于正在运行的前台作业:Ctrl+z
注意:实际上是向此进程发送了19号信号,转入后台后即停止运行
2.对于尚未启动的作业,使其启动并转入后台:
# COMMAND &
注意:此类作业是从前台启动,但是启动后立即转入后台,但即便如此,此进程也是与终端相 关联的进程;如果终端关闭,则此类进程也会终止;
3.对于尚未启动的作业,使其启动并转入后台,且同时解除与终端的关联
# nohup COMMAND &
查看后台作业:
jobs
将后台作业转入前台运行
fg [JOB_ID]
使后台作业在后台运行:
bg [JOB_ID]
终止后台作业:
kill %JOB_ID
kill %1
调整进程优先级的命令
nice - run a program with modified scheduling priority
用法:nice [OPTION] [COMMAND [ARG]...]
选项 -n NICE:指定nice值 默认为10
renice - alter priority of running processes
用法:renice [-n] priority pid...
选项:
-n NICE 调整指定nice值,在原有的nice值的基础上+NICE