Java教程

18进程管理

本文主要是介绍18进程管理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

进程管理

一、什么是进程,什么是线程

1、什么是程序
    一般情况下,代码、安装包等全部都是应用程序
        
2、什么是进程
    应用程序运行起来的能够提供某种服务的实例
    
3、什么是线程
    进程中处理具体事务的最小单位
    一个进程中,至少有一个线程,可以有多个线程(多线程)

二、进程的三种状态

就绪态:应用程序等待CPU处理
运行态:CPU正在处理应用程序
阻塞态:CPU运行完毕后,应用程序进入阻塞态

三、查看进程

ps  :   获取当前系统进程的命令
​
-a  :   显示一个终端的所有进程
-u  :   选择有效的用户id或者时用户名
-x  :   显示没有控制终端的进程,同时显示各个命令的具体路径
​
ps -a -u -x  可简写为  ps -aux
​
-aux 一般情况下是一起使用,相同的参数组合还有一个 -ef 参数
​
-ef 和 -aux 之间的区别?
    -ef     : 会打印出父级PID
    -aux    : 会打印出CPU、内存相关的使用情况

四、ps详解+

[root@localhost opt]# ps -aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.4    43696  4044 ?        Ss   Oct12   0:02 /usr/lib/systemd/
​
​
USER    :   运行当前进程的用户
PID     :   进程的编号(ID)
%CPU    :   CPU占用率
%MEM    :   内存占用率
​
VSZ     :   应用程序向系统申请的内存(虚拟内存)单位:kb(liiobytes)
    VSZ是指已分配的线性空间大小,这个大小通常并不等于程序实际用到的内存大小,产生这个的可能性很多。比如内存映射,共享的动态库,或者向系统申请了更多的堆,都会扩展线性空间大小
    
RSS     :   应用程序实际上使用的大小(实际内存)单位:kb(liiobytes)
    RSS是Resident Set Size,常驻内存大小,即进程实际占用的物理内存大小
    
TTY     :   应用程序正在使用的终端(?代表后台运行,也就是说不占用任何终端)
    tty终端   :   操作系统终端
    pts终端   :   虚拟终端
​
STAT    :   进程的状态
    R   :   正在运行状态(正在使用CPU)
    S   :   可中断睡眠状态(一直不使用CPU)
    D   :   不可中断睡眠,即在睡眠的过程中不可以接收信号唤醒-->执行的IO操作得不到硬件设备的响应
    T   :   停止的进程
    Z   :   僵尸进程
    X   :   死掉的进程(无法观察)
    <   :   优先级较高的进程
    N   :   优先级较低的进程
    s   :   包含子进程
    +   :   表示在前台运行的进程
    l   :   代表以线程的方式运行,即多线程
    |   :   管道符号,代表多进程
    
    知识储备:
        nice    :   设置进程的优先级
            -n  :   设置具体的进程优先级
            -20~20  :   数字越大优先级越小
        
        案例:nice -n -15 sleep 100
​
START   :   进程开始的时间
TIME    :   进程占用CPU的总时间
COMMAND :   进程运行的命令
    带[]号的表示内核态进程
    不带[]号的表示用户态进程

五、top命令

实时查看进程的命令

5.1、基本参数

默认情况下,top命令是3秒刷新一次
    
-d  :   指定刷新的频率(后跟时间)
-p  :   查看指定进程的信息(后跟PID号)
-u  :   查看指定用户的进程(后跟用户名)
-n  :   查看指定top次数的信息
    
[root@localhost ~]# top
[root@localhost ~]# top -d 1  # 1秒刷新一次
[root@localhost ~]# top -d 1 -p [PID号] # 进程的pid
[root@localhost ~]# top -d 1 -p `pgrep nginx | head -1`
[root@localhost ~]# top -d 1 -p `pgrep sshd | head -1`,33  # 查看sshd以及pid为33的进程
[root@localhost ~]# top -d 1 -u nginx  # 查看指定用户进程
[root@localhost ~]# top -b -n 2 > top.txt  # 将2次top信息写入到文件

5.2、系统整体统计信息

​
top - 11:35:39 up 1 day, 25 min,  3 users,  load average: 0.00, 0.01, 0.05
Tasks:  91 total,   1 running,  90 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 :   995676 total,   796276 free,   109180 used,    90220 buff/cache
KiB Swap:  1572860 total,  1572860 free,        0 used.   763052 avail Mem 
​
    up      :启动
        up左边代表当前的时间
        up右边代表运行了多长时间
    down    :停止
    load average    :系统负载
        load average: 0.86, 0.56, 0.78    CPU 1分钟,5分钟,15分钟平均负载
    us  :用户态进程占用cpu时间的百分比
    sy  :内核态进程占用cpu时间的百分比
    ni  :代表有限被调度的进程占cpu时间的百分比
    id  :cpu空闲的百分比
    wa  :cpu等待io的百分比
    hi  :硬件中断,处理硬件中断所占用CPU的时间
    si  :软件中断,处理软件中断所占用CPU的时间
    st  :被偷走的cpu
​

5.3、进程信息

VIRT:virtual memory usage 虚拟内存
    1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
    2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量
​
RES:resident memory usage 常驻内存
    1、进程当前使用的内存大小,但不包括swap out(当某进程向OS请求内存发现不足时,OS会把内存中暂时不用的数据交换出去,放在SWAP分区中,这个过程称为SWAP OUT。当某进程又需要这些数据且OS发现还有空闲物理内存时,又会把SWAP分区中的数据交换回物理内存中,这个过程称为SWAP IN)
    2、包含其他进程的共享
    3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
    4、关于库占用内存的情况,它只统计加载的库文件所占内存大小
​
SHR:shared memory 共享内存
    1、除了自身进程的共享内存,也包括其他进程的共享内存
    2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小
    3、计算某个进程所占的物理内存大小公式:RES – SHR
    4、swap out后,它将会降下来,因为内存充裕了,大家就没必要合租内存了
​
DATA
    1、数据占用的内存。如果top没有显示,按f键、然后用空格选中DATA项目、然后按q则可以显示出来。
    2、真正的该程序要求的数据空间,是真正在运行中要使用的。
​

5.4、top运行中可以通过top的内部命令对进程的显示方式进行控制

M   按内存的使用排序
P   按CPU使用排序
N   以PID的大小排序
R   对排序进行反转
f   自定义显示字段
  显示所有CPU的负载
s   改变画面更新频率
1(数字1)  展开CPU详情
m   改变内存的显示样式
    
h|? 帮助
<   向前
>   向后
z   彩色

5.5、进程信号

1、什么是信号
	表示信息的物理量。简而言之,操作发出信号指令,进程根据指令执行的一种沟通方式
		
2、kill命令
	kill就是发送信号的命令
		
	[root@localhost ~]# 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
			21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
			26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
			31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
			38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
			43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
			48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
			53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
			58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
			63) SIGRTMAX-1	64) SIGRTMAX	
			
3、HUP信号
	重载
	id   :   1
		完整的名字:SIGHUP
				
	作用:
		更新进程的配置
			
4、INT、QUIT和TSTP	  终止信号
	INT信号就是ctrl+c	停止进程
	QUIT信号就是ctrl+\	终止进程
	TSTP信号就是ctrl+z	中断信号
		
5、KILL和TERM
	KILL	:杀死信号(直接回收内存,强制剥离CPU)
	TERM	:终止信号
		
6、CONT和STOP	  恢复和暂停
	CONT	恢复
	STOP	暂停
		
知识储备:
	$$	:打印当前进程的PID
		
kill -9 pid
kill -s SIGKILL pid
	
6、查看网络状态
	安装网络调试工具
	yum install net-tools	
	[root@von ~]# netstat -tnlp  # 查看正在监听的,且使用tcp协议的进程
		-t		tcp协议
		-u		udp协议
		-l		listen
		-p		PID/Program name
		-n		不反解,不将IP地址解析为主机名,不将端口解析成协议名(80 ---> http)
			
7、僵尸进程和孤儿进程
	僵尸进程:
		1、进程
		2、进程的生命周期已经结束
		3、进程依然占着PID不释放
	孤儿进程:
		1、孤儿进程的父进程已经结束,而子进程还在运行
		2、在没有父进程的情况下,被操作系统进程(pid=1)接收

 

 

这篇关于18进程管理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!