ps
查看进程,列出执行ps命令的那个时刻的进程快照。如果想要动态显示,使用top命令
参数格式:
UNIX格式:一个"-"开头
BSD格式:没有"-"开头
GNU长格式:两个"-"开头
a # 显示与终端相关的所有进程,包含每个进程的完整路径
u # 显示进程的用户信息
x # 显示与终端无关的所有进程
-a # 显示所有终端下执行的进程
-u # 显示指定用户相关的进程信息
-e # 显示所有进程
-f # 额外显示UUID PPID C与STIME栏位
f # 显示进程树
-H # 显示进程树
-I # 以详细的格式来显示进程的状况
-o # 自定义输出指定字段,以逗号分隔
[root@centos7 ~]# ps PID TTY TIME CMD 1525 pts/0 00:00:00 bash 1884 pts/0 00:00:00 ps [root@centos7 ~]# ps -ef # 常用组合,UNIX格式组合 -e -f ,额外显示UID,PPID,C与STIME栏位 UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:04 ? 00:00:01 /usr/lib/systemd/systemd --switched-rroot 2 0 0 10:04 ? 00:00:00 [kthreadd] root 3 2 0 10:04 ? 00:00:00 [ksoftirqd/0] root 5 2 0 10:04 ? 00:00:00 [kworker/0:0H] root 7 2 0 10:04 ? 00:00:00 [migration/0]
# UID # 进程被该UID所拥有
# PID # 进程的标识号
# PPID # 进程的父进程的标识号
# C # CPU使用的资源百分比
# STIME # 进程开始的时间
# tty # 该进程实在哪个终端机上面运作,若与终端无关,则显示?,tty1-tty6是本机上面的登入者进程,pts/0表示网络连接进主机的进程
# TIME # 进程所使用的总的CPU时间
# CMD # 正在执行的命令
[root@centos7 ~]# ps aux # BSD格式参数,使用a选项和x选项显示所有进程 u显示进程的用户信息
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 43680 4052 ? Ss 10:04 0:01 /usr/lib/systemd/systroot 2 0.0 0.0 0 0 ? S 10:04 0:00 [kthreadd] root 3 0.0 0.0 0 0 ? S 10:04 0:00 [ksoftirqd/0] root 5 0.0 0.0 0 0 ? S< 10:04 0:00 [kworker/0:0H] root 7 0.0 0.0 0 0 ? S 10:04 0:00 [migration/0]
# USER 该进程所属用户
# PID 该进程的进程号
# %CPU 该进程使用掉的CPU资源百分比
# %MEM 该进程所占用的内存百分比
# VSZ 该进程使用掉的虚拟内存量
# RSS 该进程占用的固定的内存量
# TTY 该进程在那个终端机上面运行的
# STAT
R 正在运行 S 正在中断睡眠中 D 不可中断睡眠 T 正在侦测或者是停止了 Z 已经终止,或者zombie僵死进程,
+ 前台进程 l 多线程进程 N 低优先级进程 < 高优先级进程 s 进程领导者 L 已将页面锁定到内存中
# START 该进程被触发启动的时间
# TIME 该进程实际使用CPU运作的时间
# COMMAND 该进程的实际命令
[root@centos7 ~]# ps -l # UNIX格式参数,使用参数-l以详细的格式显示进程的状况
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1525 1419 0 80 0 - 29122 do_wai pts/0 00:00:00 bash
0 R 0 1898 1525 0 80 0 - 38300 - pts/0 00:00:00 ps
# F 代表这个进程的flag,4代表超级用户
# S 代表这个进程的状态(STAT),
# PRI 优先级Priorty的缩写,执行顺讯
# NI NICE值
# ADDR 指出该进程在内存那个部分,如果是个running进程,一般是“-”
# SZ 使用掉的内存大小
# WCHAN 进程是否在运行当中,-表示正在运行
pgrep
显示指定进程的pid命令,ps和grep命令的结合
-u 显示指定用户的所有进程号
[root@centos7 ~]# pgrep sshd 1251 1419 [root@centos7 ~]# pgrep -u root 1 2 3
kill
终止进程
kill [-s signal|-p] [-q sigval] [-a] [--] pid...
-l 列出全部的信号名称
-p 指定kill命令只打印相关进程的进程号
-s 指定要发送的信号
[root@centos7 ~]# kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP [root@centos7 ~]# kill -l 9 KILL # HUP(1) 挂起,通常因终端掉线,或用户退出而引发 # INT2(2) 中断, # QUIT(3) 退出 # KILL(9) 立即结束进程的运行 # TERM(15) 终止,系统关机时发送 # TSTP 暂停进程的运行, [root@centos7 ~]# kill -9 进程号码
# mysql进程严禁使用kill -9 强制杀死
特殊信号“0”
# kill有个特殊信号0,使用格式,kill -0 $pid 其中的-0表示不发送任何信号给$pid对应的进程,
但是仍然会对$pid是否存在对应的进程进行检查,若进程存在,返回0.反之,返回1 一般脚本中会用到,来写一个管理系统服务的脚本
killall
通过进程名终止进程,需要连续执行几次
-u 终止指定用户的进程
-w 等待所有被终止的进程死去,如果进程停留在僵死状态,那么killall可能会永久等待
pkill
通过进程名终止指定的进程,可杀死指定进程及子进程
-t # 杀死指定终端的进程
-u # 杀死指定用户的进程
[root@centos7 ~]# w 13:59:12 up 3:54, 1 user, load average: 0.08, 0.03, 0.05 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.0.0.1 10:04 8.00s 0.21s 0.05s w [root@centos7 ~]# pkill crond # 通过进程名 [root@centos7 ~]# systemctl status crond.service [root@centos7 ~]# pkill -t tty1 # 通过终端名 [root@centos7 ~]# pkill -u root # 通过用户名
top
实时地对系统处理器状态进行监控,能够实时地显示系统中各个进程占用的状况
-a # 将进程按照使用内存排序
-b # 批处理的模式显示进程信息,输出结果可以传递给其他程序或写入到文件中,配合-n使用,一直打到-n设置的阈值
-c # 显示进程的整个命令路径,而不是只显示命令名称
-d # 指定每两次屏幕信息刷新之间的时间间隔
-H # 指定这个可以显示每个线程的情况,否则就是进程的总的状态
-i # 不显示闲置或者僵死的进程状态
-n # top输出信息更新的次数,完成后将推出top命令
-p # 显示指定的进程信息
交互式命令及说明
Z,B,E,e Global: 'Z' colors; 'B' bold; 'E'/'e' summary/task memory scale 字体颜色,加粗,摘要/任务记忆量表 l,t,m Toggle Summary: 'l' load avg; 't' task/cpu stats; 'm' memory info 切换摘要:'l'平均负载; 't' task/CPU状态; m 内存信息 0,1,2,3,I Toggle: '0' zeros; '1/2/3' cpus or numa node views; 'I' Irix mode f,F,X Fields: 'f'/'F' add/remove/order/sort; 'X' increase fixed-width L,&,<,> . Locate: 'L'/'&' find/again; Move sort column: '<'/'>' left/right R,H,V,J . Toggle: 'R' Sort; 'H' Threads; 'V' Forest view; 'J' Num justify c,i,S,j . Toggle: 'c' Cmd name/line; 'i' Idle; 'S' Time; 'j' Str justify x,y . Toggle highlights: 'x' sort field; 'y' running tasks z,b . Toggle: 'z' color/mono; 'b' bold/reverse (only if 'x' or 'y') u,U,o,O . Filter by: 'u'/'U' effective/any user; 'o'/'O' other criteria n,#,^O . Set: 'n'/'#' max tasks displayed; Show: Ctrl+'O' other filter(s) C,... . Toggle scroll coordinates msg for: up,down,left,right,home,end k,r Manipulate tasks: 'k' kill; 'r' renice d or s Set update interval W,Y Write configuration file 'W'; Inspect other output 'Y'
top - 14:27:26 up 4:22, 1 user, load average: 0.08, 0.03, 0.05
Tasks: 96 total, 2 running, 94 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1865284 total, 1460360 free, 96264 used, 308660 buff/cache KiB Swap: 1048572 total, 1048572 free, 0 used. 1595216 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2029 root 20 0 0 0 0 R 0.3 0.0 0:00.14 kworker/0:1
第一行:任务队列信息,同uptime命令的执行结果
14:27:26 # 当前系统时间
up 4:26 # 系统已经运行了4个半小时
1 user # 当前有1个用户登录系统
load average: 0.08, 0.03, 0.05 # 1分钟,5分钟,15分钟的平均负载情况
第二行:Tasks为任务(进程)。上面的信息显示为
共有96个进程,处于运行状态的有2个,94个在休眠,stoped状态0个,zombie状态有0个
第三行:CPU状态信息
us # 用户空间占用CPU的百分比
sy # 内核空间占用cpu的百分比
ni # 改变优先级的进程占用CPU的百分比
id # 空闲CPU百分比
wa # I/O等待只用CPU的百分比
hi # 硬中断占用CPU的百分比
si # 软中断
st # 虚拟机占用CPU的百分比
第四行:内存状态
total # 物理内存总量
used # 使用中的内存总量
free # 空闲内存总量
buffers # 缓冲的内存量
第五行:swap交换分区信息
total # 交换分区总量
used # 使用的交换区总量
free # 空闲交换区总量
cached # 缓存的内存量
第六行:给出的各进程(任务)的状态监控
PID # 进程iD
USER # 进程所有者
PR # 进程优先级
NI # nice值,负值表示高优先级,正值表示低优先级
VIRT # 进程使用的虚拟内存总量,单位为KB
RES # 进程使用的,未被换出的物理内存大小,单位KB
SHR # 共享内存大小,单位为kb
S # 进程状态,D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
%CPU # 上次更新到现在的CPU时间占用百分比
%MEM # 进程使用的物理内存百分比
TIME+ # 进程使用的物理内存百分比
COMMAND # 进程名称
nohup
用户退出系统进程继续工作。可以将程序以忽略挂起信号的方式运行起来,被运行程序的输出信息将不会显示到终端
输出信息写入到当前目录的nohup.out文件中,如果当前目录的nohup.out文件不可写,则输出重定向到$HOME/nohup.out
strace
跟踪进程的系统调用,是一款程序调试工具,主要检车一个应用程序所使用的系统调用以及他所接收的系统信息
-c 统计每一个系统调用所执行的时间,次数,和出错的次数
-d 输出关于标准错误的调试信息
-f 跟踪目标进程,以及目标进程创建的所有子进程
-i 输出系统调用的入口指针
-q 进制输出关于脱离的消息
-r 输出每一个系统调用的相对时间
-t 在输出的每一行前调用的相对时间
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量,文件stat结构等打印出来
-x 以16进制形式输出非标准字符串
-e 输出过滤器,通过表达式,可以过滤掉你不想要的输出
-o 将strace的输出写入文件filename
-p pid 指定要跟踪的进程pid,要同时跟踪多个pid,重复多次-p选项即可
[root@centos7 ~]# strace -tt -f /etc/init.d/network [root@centos7 ~]# strace -c /etc/init.d/network Usage: /etc/init.d/network {start|stop|status|restart|reload|force-reload} % time seconds usecs/call calls errors syscall ------ ----------- ----------- --------- --------- ---------------- 44.53 0.000839 168 5 clone 27.44 0.000517 1 382 rt_sigprocmask 6.53 0.000123 5 26 read # 上面的结果告诉我们调用了哪些系统函数,调用的次数是多少,消耗了多少时间等信息,这对我们分析程序来说是非常有用的
ltrace
ltrace能够跟踪进程的库函数调用,它会显现出调用了那个库函数,而strace则是跟踪进程的每个系统调用
和strace参数公用
runlevel
输出当前Linux系统的运行级别
0 停机
1 单用户模式
2 无网络的多用户模式
3 多用户模式
5 图形界面多用户模式
6 重启
init
初始化Linux进程,是所有Linux进程的父进程,进程号为1,主要任务一句/etc/inittab创建linux进程
service
[root@centos7 ~]# service --status-all # 显示所有服务状态
管理系统服务,比如start|stop|status|reload等等