[toc]
什么是进程 
程序
程序是数据和指令的集合,是一个静态的概念,比如/bin/ls、/bin/cp等二进制文件,同时程序可以长期存在系统中。 
 
 
进程
进程是一个程序的运行过程,是一个动态概念,进程是存在生命周期概念的,也就是说进程会随着程序的终止而销毁,不会永远在系统中存在。 
 
 
进程的生命周期
用户发起请求 
父进程会fork出子进程,子进程会继承父进程的大部分属性,如:文件描述等,处理任务 
子进程在处理任务的过程中,父进程是一个wait状态,等待子进程结束汇报 
 
 
僵尸进程
子进程比父进程先结束,父进程没有回收子进程的资源,此时的子进程就称为”僵尸进程” 
 
 
孤儿进程
父进程比子进程先结束,子进程还在执行任务,没有父进程管理,此时的子进程就称为“孤儿进程” 
 
 
 
静态进程状态 ps(静态查看当前进程状态) 1 2 3 4 5 6 7 8 9 10 ps 选项 ps a			 ps u			 ps x			 ps aux			 
列标识 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 ps aux USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND USER			 PID				 %CPU			 %MEM			 VSZ				 RSS				 TTY				 	?:		 	tty1:	 	pts/0:	 STAT			 	D:		 	R:		 	S:		 	T:		 	W:		 	X:		 	Z:		 	<:		 	N:		 	L:		 	s:		 	l:		 	|:		 	+:		 START			 TIME			 COMMAND			 	[]:		 	没[]:	 
ps命令用法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 -e		 -f		 -l		 -a		 ps aux --sort  列标识|less			 ps aux|sort  -k区域 -n|grep 软件		 ps auxf|grep [n]ginx			    ps ax -o 列标识,列标识			   pidof 软件名					     pgrep -l -a 软件名					 pstree							  
动态进程状态 top(动态查看进程状态) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 h		 z		 1		 s		 b		 M		 P		 R		 f		 k		 W		 q		 
top列标识解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 top - 17:10:10 up  8:11,  1 user,  load average: 0.00, 0.01, 0.05 top - 17:10:10					 up  8:11						 1 user							 load average: 0.00, 0.01, 0.05		 Tasks:  96 total,   1 running,  95 sleeping,   0 stopped,   0 zombie Tasks:  96 total			 1 running					 95 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 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 :   995892 total,   597616 free,    99008 used,   299268 buff/cache 995892 total		 597616 free			 99008 used			 299268 buff/cache	  KiB Swap:  1048572 total,  1048572 free,        0 used.   723692 avail Mem 1048572 total		 1048572 free		 0 used				 723692 avail Mem	 PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND PID			 USER		 PR			 NI			 VIRT		 RES			 SHR			 S			 %CPU		 %MEM		 TIME+		 COMMAND		 
进程管理命令 kill(进程关闭命令) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 kill  -l			1 HUP		 2 INT		 3 QUIT		 9 KILL		 15 TERM		 18 CONT		 19 STOP		 20 TSTP		 pkill		 killall		 
nice(进程优先级) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 nice 值越高:表示优先级越低,例如19,该进程优先将CPU使用量让给其他进程使用。nice 值越低:表示优先级越高,例如-20,该进程优先调用更多CPU资源。优先级别高的进程,可以优先享用系统的资源:cpu、内存、虚拟内存等 top								 ps axo aommand,nice |grep [软]件名	 nice  -n -nice 值 启动进程			 renice -n -nice 值 pid			 修改完pid值,退出终端重新连接后查看,命令:exit (登出) 
企业案例:Linux假死 什么是假死 所谓假死,就是能ping通,但是ssh不上去;任何其他操作也都没反应,包括上面部署的nginx也打不开页面。
假死其实很难出现一次 作为一个多任务操作系统,要把系统忙死,忙到ssh都连不上去,也不是那么容易的。尤其是现在还有fd保护、进程数保护、最大内存保护之类的机制。
假死如何实现 有一个确定可以把系统搞成假死的办法是:主进程分配固定内存,然后不停的fork,并且在子进程里面sleep(100)。
系统假死为何能ping同无法连接 此时机器可以ping通,但是无法ssh上去。这是由于ping是在系统底层处理的,没有参与进程调度;sshd要参与进程调度,但是优先级没oom killer高,总得不到调度。
出现假死怎么办 为什么要费那么大的力气把机器搞死?我们知道假死是怎么产生的即可,这样可以针对假死的原因进行预防。 (其实假死的情况很少发生,只有当代码写的bug很多的情况下会出现。)