: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 计划任务