六:Linux进程管理
		A:进程的概念
			-->进程和程序的区别:
				1:进程是静态的概念,本身作为一种软件资源长期保存;而进程是程序的执行过程,
			       它是动态概念,有一定的生命期,是动态生成和消亡的。
			    2:程序和进程无一一对应关系。一个程序可以由多个进程共用;另一方面,一个进程
			       在活动中有可以顺序地执行若干个程序
			-->父进程与子进程:
				1:子进程是由一个进程所产生的进程,产生这个进程的程序称为父进程。
				2:在linux系统中,使用系统调用fork创建进程。fork复制的内容包括父进程
				  的数据和堆栈以及父进程的进程环境
				3:父进程终止子进程也终止
				
			-->前台进程和后台进程
				1前台进程:在shell提示出打入命令后,创建一个子进程,运行命令,shell等待命令退出,
				    能后返回到对用户给出提示符。这个命令与shell异步运行,即在前台运行,用户在
					它完成之前不能执行另一个命令。
					如:find / -name init   这个命令要等很久才能找到,但没找到之前只能等待。
				2后台进程:在shell提示出打入命令,若后随一个&,shell创建的子进程运行此命令,但不等待
					命令退出,而直接返回到对用户给出提示。这条命令与shell同步运行,即在后台运行。后台
					进程必须是非交互式的(如:ping 192.168.1.12 &,这是交互式的)
					如:find / -name init > /test/init.find &    会创建个子进程运行该命令,不用等待,可以立马做别的操作
			-->进程状态:
				1 就绪:进程已经分配到资源,但因为其他进程正占用CPU,所以暂时不能运行要等待分配CPU的状态
				2 等待:因等待某种时间而暂时不能运行的状态(如:暂停进程)
				3 运行:进程分配到CPU,正在处理器上运行
				
			-->查看用户信息W
				w 显示信息的含义:
					JCPU:以终端代号来区分,该终端所有相关的进程执行时,所消耗的CPU时间会显示在这里
					PCPU:cpu执行程序耗费的时间
					WHAT:用户正在执行的操作
					load average:分别显示系统在过去1、5、15分钟内的平均负载程度,(平均负载值在0.8以下,为较轻负载)
					FROM:显示用户从何处登录系统,":0"的显示代表该用户是从X Window下,打开文本模式窗口登录的
					IDLE:用户闲置的时间。这是一个计时器,一旦用户执行任何操作,该计时器便会被重置
				查看个别用户信息:w 用户名									
			
			
		B:进程管理命令
			-->查看系统中的进程ps:
				常用选项
					a: 显示所有用户的进程
					u: 显示用户名和启动时间
					x: 显示没有控制终端的进程
					e: 显示所有进程,包括没有控制终端的进程
					l: 长格式显示
					w: 宽行显示,可以使用多个w进行加宽显示
					
				ps应用实例:
					#ps 查看隶属于自己的进程
					#ps -u or -l  查看隶属于自己进程详细信息
					#ps -le or -aux  查看所有用户执行的进程的详细信息
					#ps -aux --sort pid 可按进程执行的之间PID、UID等对进程进行排序
					列出的进程信息含义:
						PID:进程号
						PPID:父进程的进程号
						TTY:进程启动的终端
						STAT:进程当前状态
							S休眠状态,D不可中断的休眠状态,R运行状态,Z僵死状态,T停止
						NI:进程优先级
						TIME:进程自从开启以来启用CPU的总时间
						COMMAND/CMD:进程的命令名
						USER:用户名
						%CPU:占用CPU时间和总时间的百分比
						%MEM:占用内存与系统内存总量的百分比
					ps应用实例:
						查看系统中指定用户执行的进程	
						#ps -aux | grep leyangjun
						#ps -uU leyangjun 

						查看进程信息
						#ps -le |grep httpd  	
						/etc/rc.d/init.d/httpd status  也可以查看进程是否启动
						
						查看系统中所有树状结构的信息
						pstree | more
			
			--> kill 杀死进程
				为什么要杀死进程:
					1:该进程占用了过多的CPU时间
					2:该进程锁住了一个终端,是其他前台后台的进程无法运行
					3:运行时间过长,但没有预期效果
					4:产生了过多到屏幕或磁盘文件的输出
					5:无法正常退出
				用法:
					关闭进程:kill 进程号
					kill -9 进程号(强行关闭)
					kill -1 进程号(重启进程)数字1
					xkill:关闭图形程序(图形界面之类的)
					killall:结束所有进程
					pgrep 服务名称 :查找服务进程号(pgrep httpd)
					pkill 进程名称 :关闭进程(这个不需要进程号,服务名就可以杀死)
				
				kill 3576
				
			-->nice和renice
				nice:
					指定程序的运行优先级
					格式:nice -n command
					例如:nice -5 myprogram
				renice:
					改变一个正在运行的进程的优先级
					格式:renice n pid
					例如:renice -5 777  、renice --5 777 (负5)
					*优先级取值范围为(-20,19),值越小优先级就越大
					
			-->用户退出后希望进程进一步执行用:nohup
			
			-->进程的挂起和恢复
				1进程的中止(挂起)和终止:
					挂起:Ctrl+Z  (就是类似暂停)
					终止:Ctrl+C (终止当前的运行命令)
				2查看被挂起的进程 : jobs (查看所有被暂停的服务 )
									
				3进程的恢复:
					恢复到前台继续运行:fg  (fg 1  --1表示暂停的编码)
					恢复到后台继续运行:bg
			
			-->top
				作用:进程状态显示和进程控制,没5秒钟自动刷新一次(动态显示)
				常用选项:
					d: 指定刷新的时间间隔
					c:显示整个命令行而不仅仅显示命令名
					u:查看指定用户的进程
					k:终止执行中的进程
					h or ? :获得帮助
					r:重新设置进程优先级
					s:改变刷新的时间间隔
					W:将当前设置写入~/.toprc文件中
					
					
		C:计划任务
			为什么要设置计划任务:减少一些人为的工作量
			计划任务的命令
				at   :安排作业在某一时刻执行一次
				batch :安排作业在系统负载不重时执行一次
				cron  :安排周期性运行的作业
				
			一:at命令的功能和格式
				功能:安排一个或多个命令在指定的时间运行一次
				at的命令格式及参数:
					at [-f 文件名]时间
					at -d or atrm 删除队列中的任务(at -d 4  ---4表示任务的序号)
					at -l or atq  查看队列中的任务  
					
					at命令指定时间的方式:
						1:绝对计时方法
							midnight  noon  teatime
							hh:mm[today]
							hh:mm tomorrow
							hh:mm 星期
							hh:mm MM/DD/YY    推荐这个格式
						2:相对计时方法(自己测试的时候可以用)
							now + n minutes
							now + n hours
							now + n days
							
				    如:指定在今天下午17:30执行某命令(假设现在时间是下午14:30,2015年4月12日)
						命令格式如下:
							at 5:30pm
							at 17:30
							at 17:30 today
							at now + 3 hours
							at now + 180 minutes
							at 17:30 15.4.12
							at 17:30 4/12/15
							
					实际操作:(比如现在要广播某个文件的内容)
						先检查下atd进程是否启动:ps -le | grep atd
						如果没有启动手动启动:/etc/rc.d/init.d/atd start
						wall:广播之前要找到wall的绝对路径,which wall ---查看路径
						1:at now +5 minutes    回车
						2:at> /usr/bin/wall < /etc/motd    (回车可以写n个命令,注意命令要写据对路径)
						3:按ctrl+d    保存
						
						如果命令很多,可以吧命令写入脚本中
						用at写的计划任务临时文件都保存在:/var/spool/at/   目录下
					
					at配置文件
						作用:限制那些用户可以使用at命令
						/etc/at.allow
						/etc/at.deny
					    如果/etc/at.allow文件存在,那么只能有列再次文件中的用户才可以使用at命令;
					  若/etc/at.allow文件不存在,则检查/etc/at.deny文件是否存在。若/etc/at.deny存在,
					  则在此文件中列出的用户都不能使用at命令。如果两个文件都不存在,则只有超级用户可以使用
					  at命令。如果两个文件都存在而且均为空,则多有的用户都可以使用at命令。
					  
			二:batch命令
				作用:安排一个或多个命令在系统负载较轻时运行一次(一般情况下负载较轻指平均负载降到0.8以下)
				使用方法同at一样,不同的是batch会检测下系统的负载状态。
			
			三:crontab命令格式--周期性计划任务(重点)
				作用:用于生产cron进程所需要的crontab文件
				crontab的命令格式:
					crontab {-l|-r|-e}
					-l  显示当前的crontab(查看定时文件)
					-r  删除当前的crontab(其实可以进入编辑吧对应要删除的去掉就行)
					-e  使用编辑器编辑当前的crontab文件
				crontab文件格式
					minute hour day-of-month month -of-year day-of-week commands
					其中:
					minute  : 一小时的哪一分钟【0-59】
					hour    : 一天中的哪个小时【0-23】
					day-of-month  :一月中的那一天【1-31】
					month-of-year :一年中的哪一月【1-12】
					day-of-week   :一周中的那一天【0-6】
					commands  : 执行命令/脚本
					把知道的具体的时间添上,不知道的都添上*
					如:分钟  小时  天 月  星期  命令/脚本
						 0     4    *   *   *     etc/leyangjun.sh   明天凌晨4天执行脚本
						 0     18   *   *   2,5   xxxx        每个星期二和星期五的18点执行该命令
						 0     18   *  1-3  2,5   xxxx        1-3月之间的星期二星期五的18点执行命令
						 30    17   *   *   1-5   /usr/bin/wall < /etc/issue   每周一到周五17:30发个广播
						 45    17   *   *   1-5   /sbin/shutdowm -h now   周一到周五17:45关机
						复杂的:
						(3-6,9-12月,每周一到周五12点到14点,每隔2分钟执行备份,/etc目录备份到 /backup/etc.2015412,备份失败的话保存失败文件)
						*/2   12-14 *  3-6,9-12 1-5  /bin/cp -r /etc /backup/etc.2015412 > /backup/etc.bak.err  
				
				书写注意事项:
					1:这些项都不能为空,必须填入
					2:如果用户不需要指定其中的几项,那么可以使用统配符*表示任何时间
					3:每个时间字段都可以指定多个值,他们之间用逗号间隔
					4:命令应该给出绝对路径
					5:用户必须具有运行所对应的命令或程序的权限
					6:执行crontab之前先看下crond进程是否启动
						ps -le | grep crond
						/etc/rc.d/init.d/crond start   手动启动
				
					crontab文件建立好以后可以到 /var/spool/cron  目录确认:
						ls /var/spool/cron         可以看到是以用户名来命名
						cat /var/spool/cron/root   就可以看到内容
						---任务执行完后文件会消失!
						
				
					cron配置文件
						作用:限制那些用户可以使用crontab命令
						/etc/cton.allow
						/etc/cron.deny
			
			--->进程管理方式	
				standalone 独立运行
					特点:就是系统进程起来后一直会在系统驻留,占用系统cpu和内存资源,在等待监听客户端的请求
						  一旦客服有请求立马给出应答。
				xinetd     进程托管
				atd、crond 计划任务