查看进程命令
ps命令
[root@i-ka ~]#ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD 4 S 0 17236 17233 0 80 0 - 28946 wait pts/0 00:00:00 bash 0 R 0 17274 17236 0 80 0 - 37233 - pts/0 00:00:00 ps
每个字段的意义简单说明如下:
F (flag):代表程序的总结旗标,常见为4 代表root
S (stat):状态列,主要的分类项目有:
R (Running):该程式正在运作中;
S (Sleep):该程式目前正在睡眠状态(idle),但可以被唤醒(signal)。
D :不可被唤醒的睡眠状态,通常这支程式可能在等待I/O 的情况(ex>列印)
T :停止状态(stop),可能是在工作控制(背景暂停)或除错(traced) 状态;
Z (Zombie):僵尸状态,程序已经终止但却无法被移除至记忆体外。
UID/PID/PPID:代表『此程序被该UID 所拥有/程序的PID 号码/此程序的父程序PID 号码』
C:代表CPU 使用率,单位为百分比;
PRI/NI:Priority/Nice 的缩写,代表此程序被CPU 所执行的优先顺序,数值越小代表该程序越快被CPU 执行。
ADDR/SZ/WCHAN:都与记忆体有关,ADDR 是kernel function,指出该程序在记忆体的哪个部分,如果是个running 的程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少记忆体/ 表示目前程序是否运作中,同样的, 若为- 表示正在运作中。
TTY:登入者的终端机位置,若为远端登入则使用动态终端介面(pts/n);
TIME:使用掉的CPU 时间,注意,是此程序实际花费CPU 运作的时间,而不是系统时间;
CMD:就是command 的缩写,造成此程序的触发程式之指令为何。
ps aux
[root@i-ka ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.0 125196 2640 ? Ss 2019 23:56 /usr/lib/systemd/sy nginx 898 0.0 0.0 55636 640 ? S 2019 0:01 nginx: worker proce redis 1012 0.0 0.0 142904 1068 ? Ssl 2019 48:14 /usr/bin/redis-serv
每一个项目代表的意义简易说明如下:
USER:该process 属于那个使用者帐号的
PID :该process 的程序识别码。
%CPU:该process 使用掉的CPU 资源百分比;
%MEM:该process 所占用的实体内存百分比;
TTY :该process 是在那个终端机上面运作,若与终端机无关则显示?,另外, tty1-tty6 是本机上面的登入者程序,若为pts/0 等等的,则表示为由网路连接进主机的程序。
STAT:该程序目前的状态,状态显示与ps -l 的S 旗标相同(R/S/T/Z)
START:该process 被触发启动的时间;
TIME :该process 实际使用CPU 运作的时间。
COMMAND:该程序的实际指令
pstree
[root@i-ka ~]#pstree [选项] [PID或用户名] #查看进程树 常用命令选项: -a:显示完整的命令行 -p:列出对应PID编号
top动态观察程序
Tasks: 63 total, 1 running, 62 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.3 us, 0.3 sy, 0.0 ni, 99.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 1883724 total, 101444 free, 85704 used, 1696576 buff/cache KiB Swap: 0 total, 0 free, 0 used. 1612240 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 26121 root 10 -10 124764 9820 6256 S 0.3 0.5 516:44.65 AliYunDun 1 root 20 0 125148 3388 2132 S 0.0 0.2 2:38.84 systemd 2 root 20 0 0 0 0 S 0.0 0.0 0:00.45 kthreadd 3 root 20 0 0 0 0 S 0.0 0.0 0:27.10 ksoftirqd/0 5 root 0 -20 0 0 0 S 0.0 0.0 0:00.00 kworker/0:0H 7 root rt 0 0 0 0 S 0.0 0.0 0:00.00 migration/0 8 root 20 0 0 0 0 S 0.0 0.0 0:00.00 rcu_bh
top 程式执行的状态列,每个项目的意义为:
PID :每个process 的识别码(PID)
USER:该process 所属的使用者;
PR :Priority 的简写,程序的优先执行顺序,越小越早被执行;
NI :Nice 的简写,与Priority 有关,也是越小越早被执行;
%CPU:CPU 的使用率;
%MEM:内存的使用率;
TIME+:CPU 使用时间的累加;
COMMAND:指令
如果你发现在某个程序的CMD 后面还接上<defunct> 时,就代表该程序是僵尸程序,可以使用kill杀死,例如:
apache 8683 0.0 0.9 83384 9992 ? Z 14:33 0:00 /usr/sbin/httpd <defunct>
pgrep命令
pgrep [选项]... 查询条件 #检索进程
常用命令选项:
-l:输出进程名,而不仅仅是 PID
-U:检索指定用户的进程
-t:检索指定终端的进程
-x:精确匹配完整的进程名
lsof命令
在终端下输入lsof即可显示系统打开的文件,因为 lsof 需要访问核心内存和各种文件,所以必须以 root 用户的身份运行它才能够充分地发挥其功能。
[root@queen ~]# lsof /root/ COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME aliyun-se 757 root cwd DIR 253,1 4096 131073 /root bash 17433 root cwd DIR 253,1 4096 131073 /root lsof 17460 root cwd DIR 253,1 4096 131073 /root lsof 17461 root cwd DIR 253,1 4096 131073 /root
常用选项参数:
-c 进程 -c 进程 #显示指定进程名现在打开的文件;可以同时列出多个程序的 -p pid1,pid2... #查看指定进程号的进程打开了哪些文件 -i #列出所有的网络连接 -i[:service|port] #列出谁在使用某个特定的tcp/udp端口 service --> /etc/service中的 service name (可以不只一个) port --> 端口号 (可以不只一个)
#lsof 文件名 显示打开指定文件的所有进程