进程基本介绍
1.在linux中,每个执行的程序都成为一个进程。每个进程都分配一个ID号。
2.每一个进程,都会对应一个父进程,而这个父进程可以复制多个子进程。
3.每个进程都可能以两种方式存在,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的,后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
4.后台进程允许多个进程一起同步执行,只需要在最后加上 & ,即表示为后台进程.
5.一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中,直到关机才结束。
显示系统执行的进程,ps命令
指令: ps ,一般使用的参数是 ps -aux
ps -a : 显示当前终端的所有进程信息
ps -u : 以用户的格式显示进程信息
ps -x : 显示后台进程运行的参数
ps指令
1 | [root@wpg-ngxs01 ~]# ps |
PID: 运行着的命令(CMD)的进程编号
TTY: 命令所运行的位置(终端)
TIME: 运行着的该命令所占用的CPU处理时间
CMD: 该进程所运行的命令
ps -aux
可以用 | 管道和 more 连接起来分页查看
1 | [root@ngxs01 ~]# ps -aux | more |
USER 用户名
UID 用户ID(User ID)
PID 进程ID(Process ID)
PPID 父进程的进程ID(Parent Process id)
SID 会话ID(Session id)
%CPU 进程的cpu占用率
%MEM 进程的内存占用率
VSZ 进程所使用的虚存的大小(Virtual Size)
RSS 进程使用的驻留集大小或者是实际内存的大小,Kbytes字节。
TTY 与进程关联的终端(tty)
STAT 进程的状态:进程状态使用字符表示的(STAT的状态码)
R 运行 Runnable (on run queue) 正在运行或在运行队列中等待。
S 睡眠 Sleeping 休眠中, 受阻, 在等待某个条件的形成或接受到信号。
I 空闲 Idle
Z 僵死 Zombie(a defunct process) 进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放。
D 不可中断 Uninterruptible sleep (ususally IO) 收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
T 终止 Terminate 进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行。
P 等待交换页
W 无驻留页 has no resident pages 没有足够的记忆体分页可分配。
X 死掉的进程
< 高优先级进程 高优先序的进程
N 低优先 级进程 低优先序的进程
L 内存锁页 Lock 有记忆体分页分配并缩在记忆体内
s 进程的领导者(在它之下有子进程);
l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads)
+ 位于后台的进程组
START 进程启动时间和日期
TIME 进程使用的总cpu时间
COMMAND 正在执行的命令行命令
NI 优先级(Nice)
PRI 进程优先级编号(Priority)
WCHAN 进程正在睡眠的内核函数名称;该函数的名称是从/root/system.map文件中获得的。
FLAGS 与进程相关的数字标识
ps其他命令
1. 把所有进程显示出来,并输出到ps001.txt文件
命令:ps -aux > ps001.txt
2. 输出指定的字段
命令:ps -o pid,ppid,pgrp,session,tpgid,comm
3.根据 CPU 使用来升序排序
$ ps -aux --sort -pcpu | less
4.根据 内存使用 来升序排序
$ ps -aux --sort -pmem | less
5.树形显示进程
$ pstree
6.查看特定用户进程
在需要查看特定用户进程的情况下,我们可以使用 -u 参数。比如我们要查看用户'pungki'的进程,可以通过下面的命令:
$ ps -u pungki
7.通过进程名和PID过滤
使用 -C 参数,后面跟你要找的进程的名字。比如想显示一个名为getty的进程的信息,就可以使用下面的命令:
$ ps -C getty
8.显示所有进程信息,连同命令行
命令:ps -ef
1 | [root@wpg-ngxs01 ~]# ps -ef | more |
UID :程序被该 UID 所拥有
PID :就是这个程序的 ID
PPID :则是其上级父程序的ID
C :CPU使用的资源百分比
STIME :系统启动时间
TTY :登入者的终端机位置
TIME :使用掉的CPU时间
CMD :所下达的是什么指令
动态监控进程top
top与ps指令很相似,它们都是用来显示正在执行的进程,top和ps的最大不同之处,在于top在执行一段时间可以更新正在运行的进程。
语法
top [选项]
选项
-b:以批处理模式操作;
-c:显示完整的治命令;
-d:屏幕刷新间隔时间;
-I:忽略失效过程;
-s:保密模式;
-S:累积模式;
-i<时间>:设置间隔时间;
-u<用户名>:指定用户名;
-p<进程号>:指定进程;
-n<次数>:循环显示的次数。
top指令
1 | [root@135 ~]# top |
top命令的结果分为两个部分
统计信息:前五行是系统整体的统计信息;
进程信息:统计信息下方类似表格区域显示的是各个进程的详细信息,默认5秒刷新一次。
统计信息说明:
第1行:Top 任务队列信息(系统运行状态及平均负载),与uptime命令结果相同。
第1段:系统当前时间,例如: 06:07:07
第2段:系统运行时间,未重启的时间,时间越长系统越稳定。
格式:up xx days, HH:MM
例如:215 days, 14:15, 表示连续运行了215天14小时15分钟
第3段:当前登录用户数,例如:1 user,表示当前1个用户登录
第4段:系统负载,即任务队列的平均长度,3个数值分别统计最近1,5,15分钟的系统平均负载
系统平均负载:单核CPU情况下,0.00 表示没有任何负荷,1.00表示刚好满负荷,超过1侧表示超负荷,理想值是0.7;
多核CPU负载:CPU核数 * 理想值0.7 = 理想负荷,例如:4核CPU负载不超过2.8何表示没有出现高负载。
第2行:Tasks 进程相关信息
第1段:进程总数,例如:Tasks: 122 total, 表示总共运行389个进程
第2段:正在运行的进程数,例如:1 running,
第3段:睡眠的进程数,例如:121 sleeping,
第4段:停止的进程数,例如:0 stopped,
第5段:僵尸进程数,例如:0 zombie
第3行:Cpus CPU相关信息,如果是多核CPU,按数字1可显示各核CPU信息,此时1行将转为Cpu核数行,数字1可以来回切换。
第1段:us 用户空间占用CPU百分比,例如:Cpu(s): 58.8%us,
第2段:sy 内核空间占用CPU百分比,例如:4.8%sy,
第3段:ni 用户进程空间内改变过优先级的进程占用CPU百分比,例如:0.0%ni,
第4段:id 空闲CPU百分比,例如:36.2%id,
第5段:wa 等待输入输出的CPU时间百分比,例如:0.0%wa,
第6段:hi CPU服务于硬件中断所耗费的时间总额,例如:0.0%hi,
第7段:si CPU服务软中断所耗费的时间总额,例如:0.1%si,
第8段:st Steal time 虚拟机被hypervisor偷去的CPU时间(如果当前处于一个hypervisor下的vm,实际上hypervisor也是要消耗一部分CPU处理时间的)
按数字1可显示各核CPU信息,显示如下:
%Cpu(s): 58.8 us, 4.8 sy, 0.0 ni, 36.2 id, 0.1 wa, 0.0 hi, 0.1 si, 0.0 st
%Cpu0 : 83.7 us, 5.3 sy, 0.0 ni, 11.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 49.5 us, 3.3 sy, 0.0 ni, 46.8 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu2 : 39.3 us, 3.4 sy, 0.0 ni, 56.6 id, 0.3 wa, 0.0 hi, 0.3 si, 0.0 st
%Cpu3 : 38.2 us, 4.1 sy, 0.0 ni, 57.4 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st
第4行:Mem 内存相关信息(Mem: 16267956 total, 7139284 free, 3883616 used, 5245056 buffers)
第1段:物理内存总量,例如:Mem: 16267956 total,
第2段:空闲内存总量,例如:Mem: 7139284 free,
第3段:使用的物理内存总量,例如:3883616 used,
第4段:用作内核缓存的内存量,例如:5245056 buffers
第5行:Swap 交换分区相关信息(Swap: 0 total, 0 used, 0 free, 11930096 cached)
第1段:交换区总量,例如:Swap: 0 total,
第2段:空闲交换区总量,例如:0 free,
第3段:使用的交换区总量,例如:0 used,
第4段:缓冲的交换区总量,11930096 cached
进程信息:
在top命令中按f按可以查看显示的列信息,按对应字母来开启/关闭列,大写字母表示开启,小写字母表示关闭。带*号的是默认列。
*A: PID = (Process Id) 进程Id;
*E: USER = (User Name) 进程所有者的用户名;
*H: PR = (Priority) 优先级
*I: NI = (Nice value) nice值。负值表示高优先级,正值表示低优先级
*O: VIRT = (Virtual Image (kb)) 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
*Q: RES = (Resident size (kb)) 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
*T: SHR = (Shared Mem size (kb)) 共享内存大小,单位kb
*W: S = (Process Status) 进程状态。D=不可中断的睡眠状态,R=运行,S=睡眠,T=跟踪/停止,Z=僵尸进程
*K: %CPU = (CPU usage) 上次更新到现在的CPU时间占用百分比
*N: %MEM = (Memory usage (RES)) 进程使用的物理内存百分比
*M: TIME+ = (CPU Time, hundredths) 进程使用的CPU时间总计,单位1/100秒
b: PPID = (Parent Process Pid) 父进程Id
c: RUSER = (Real user name)
d: UID = (User Id) 进程所有者的用户id
f: GROUP = (Group Name) 进程所有者的组名
g: TTY = (Controlling Tty) 启动进程的终端名。不是从终端启动的进程则显示为 ?
j: P = (Last used cpu (SMP)) 最后使用的CPU,仅在多CPU环境下有意义
p: SWAP = (Swapped size (kb)) 进程使用的虚拟内存中,被换出的大小,单位kb
l: TIME = (CPU Time) 进程使用的CPU时间总计,单位秒
r: CODE = (Code size (kb)) 可执行代码占用的物理内存大小,单位kb
s: DATA = (Data+Stack size (kb)) 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
u: nFLT = (Page Fault count) 页面错误次数
v: nDRT = (Dirty Pages count) 最后一次写入到现在,被修改过的页面数
y: WCHAN = (Sleeping in Function) 若该进程在睡眠,则显示睡眠中的系统函数名
z: Flags = (Task Flags <sched.h>) 任务标志,参考 sched.h
*X: COMMAND = (Command name/line) 命令名/命令行
top命令交互
常用交互操作
基础操作
1:显示CPU详细信息,每核显示一行
d / s :修改刷新频率,单位为秒
h:可显示帮助界面
n:指定进程列表显示行数,默认为满屏行数
q:退出top
面板隐藏显示
l:隐藏/显示第1行负载信息;
t:隐藏/显示第2~3行CPU信息;
m:隐藏/显示第4~5行内存信息;
进程列表排序
M:根据驻留内存大小进行排序;
P:根据CPU使用百分比大小进行排序;
T:根据时间/累计时间进行排序;
详细交互指令:h / ? 可显示帮助界面,原始为英文版,简单翻译如下:
系统网络情况netstat
netstat命令用来打印Linux中网络系统的状态信息,可让你得知整个Linux系统的网络情况.
如果你的计算机有时候接收到的数据报导致出错数据或故障,你不必感到奇怪,TCP/IP可以容许这些类型的错误,并能够自动重发数据报。但如果累计的出错情况数目占到所接收的IP数据报相当大的百分比,或者它的数目正迅速增加,那么你就应该使用netstat查一查为什么会出现这些情况了。
选项参数:
1) -a或–all 显示所有连线中的Socket。
2) -n或–numeric 直接使用IP地址,而不通过域名服务器。
3) -t或–tcp 显示TCP传输协议的连线状况。
4) -u或–udp 显示UDP传输协议的连线状况。
5) -v或–verbose 显示指令执行过程。
6) -p或–programs 显示正在使用Socket的程序识别码和程序名称。
7) -s或–statistice 显示网络工作信息统计表。
实例:
1)[root@localhost ~]# netstat 无参数的使用
1 | [root@localhost ~]# netstat |
说明:
1."Recv-Q"和"Send-Q"指的是接收队列和发送队列.
2.Proto显示连接使用的协议:
RefCnt表示连接到本套接口上的进程号;Types显示套接口的类型;State显示套接口当前的状态;Path表示连接到套接口的其它进程使用的路径名。
3.套接口类型:
-t :TCP
-u :UDP
-raw :RAW类型
--unix :UNIX域类型
--ax25 :AX25类型
--ipx :ipx类型
--netrom :netrom类型
4.状态说明:
LISTEN: 侦听来自远方的TCP端口的连接请求
SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
SYN-RECEIVED: 再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
ESTABLISHED:意思是建立连接。表示两台机器正在通信。
FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
FIN-WAIT-2:从远程TCP等待连接中断请求
CLOSE-WAIT:等待从本地用户发来的连接中断请求,对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭
CLOSING:等待远程TCP对连接中断的确认
LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认.
我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。
目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。
CLOSED:没有任何连接状态
nohup
语法:nohup program &
描述:使进程在用户退出登陆后仍旧继续执行