首页 > 代码库 > 进程管理
进程管理
下面是进程管理及其相关知识,主要分为六部分,分别是进程基础知识、进程查看(ps)、进程管理(kill)、进程作业管理(jobs)、调整进程(nice)、进程调度(at、crond)。
一、进程基础知识
1、基础知识点
进程:【进程】就是动态的程序副本,包含一个或多个执行流。
调整进程:进程管理的指令环的【CPU特权等级】分为4级,分别是0、1、2、3四级,1、2特权等级没有用到,0特权的等级针对于内核,3特权等级针对于所有应用程序。
进程【队列】分类:运行队列、过期队列。
进程中【内存数据交换】:把内存分为多个页框,每个页框为4KB。交换分区只能交换数据,不能交换指令;所以,数据是交换内存集,指令是常驻内存集。虚拟内存和页框之间存在MMU(内存管理单元)。
2、进程创建
内核正常启动,并启动硬件资源后,会创建一个init进程,该init进程负责用户空间的进程管理。
在CentOS5及其以前的版本中,采用的是sys V的进程,该风格是利用脚本的值方式来创建子进程,利用shell来实现,执行速度较慢。
在CentOS6中,是upstart进程,名称依旧是init,但创建进程可以【多线程创建】,速度稍快。
在CentOS7中,是systemd进程,与init完全不同,systemd可引导整个系统启动。
init进程不是父进程创建,除此之外,所有进程都是由父进程来创建的。所有子进程都须由父进程来结束。
3、进程优先级
进程优先级分为140个,分别是0-99实时优先级,100-139静态优先级。优先级中越靠近100优先级越高。
调整优先级,通过调整nice来调整,nice值是-20到19,只有管理员才可以调整负数优先级,用来提高优先级。
4、进程分类
按启动方式分:守护进程、用户进程
按运行位置分:前台进程、后台进程
按资源消耗来分:非交互式进程(CPU-Bond)、交互式进程(IO-Bond)
二、进程查看
1、pstree
查看进程以树状来显示,来显示进程之间的相关关系。
# pstree
2、ps
【格式】:ps [options]
ps命令的选项有三种表示法,分别是UNIX、GNU、BCD,具体解释如下。
(1)、BCD风格选项
a:所有与【终端相关】的进程
x:所有与【终端无关】的进程
u:显示与进程有关的【用户名称】
# ps aux
显示的进程信息中,详细信息的相关解释如下:【USER】表示进程的所有者, 【PID】表示进程标识符,【VSZ】表示虚拟内存集(可交换内存集),RSS表示常驻内存集,STAT中【D】表示不可中断的睡眠状态;【+】表示前台进程,【l】表示包含多线程的进程,【<】表示高优先级进程,【N】表示低优先级进程,【s】表示有子进程的父进程。
(2)、UNIX风格选项
-e:显示所有进程
-f/-F:显示进程的完整格式
# ps -ef
# ps -eF
PPID:父进程的PID(进程标识符)
C:表示进程占用的CPU时间的百分比
SZ:虚拟内存集
RSS:常驻内存集
PSR:表示此进程在哪个CPU核心上运行;
-H:以层级机构显示进程的父子关系;
# ps -eFH ----存在依赖关系
3、pgrep,pkill(相同)
pgrep, pkill ------通过名称和其它属性查找进程。
格式:pgrep [options] pattern
pkill [options] pattern
常用选项:
-u uid:有效用户
-U uid:真实用户
-t TERM:与终端相关的进程
-l:显示进程名称
-a:进程完整的命令行参数
-G:显示真实组ID的进程
# pgrep -u 500
4、pidof
pidof -------用于查找一个运行的程序的PID,显示指定进程名称ID。
选项:
-s:表示只返回1个pid
-x:表示同时返回运行给定程序的shell的pid
-o:忽略后面给定的pid,可以使用多个-o。
5、top
top ------实时显示系统中各个进程的资源占用状况
常用的选项:
-d #:指定top刷新的时间间隔,默认是3秒
-b:按批次显示进程信息
-n #:通常与-b选项一起使用,表示显示多少批,即 -bn #
top显示的进程有5行,第一行显示时间信息,第二行显示进程数,第三行显示CPU使用情况,第四行显示内存使用情况,第五行显示交换分区使用情况,最后就是具体数值情况。top可以使用交互式命令,【1】显示或隐藏CPU核心信息。
# top -d 2
# echo 1 > /proc/sys/vm/drop_caches --------------清空缓冲、缓存
6、vmstat
vmstat -------------显示虚拟内存统计信息
格式:
vmstat [options] [delay [count]]
[options]:
-s:从/proc/meminfo文件中抽取信息,并加工后输出。
[delay [count]]:
delay:重复执行vmstat命令,默认为秒。
count:重复执行vmstat命令的【次数】
7、pmap
pmap - report memory map of a process
格式:
pmap [options] pid [...]
选项:
-x:显示扩展信息。
8、htop
htop -------显示系统中各个进程的资源占用状况,时top的增强版
常用选项:
-d #:htop刷新的间隔时间;
-u USERNAME:显示指定用户的进程;
-s COLUME_NAME:根据指定字段进行排序;
# htop -d 2
9、glances
glances ---------系统资源监控工具(python开发),支持交互式,具c/s特性
glances [-bdmn1] [-t refresh] [-f file] [-o output]
常用选项:
-b:Byte显示网卡的数据速率
-d:关闭磁盘I/O模块
-m:关闭Mount模块
-n:禁用网络模块
-1:单独显示CPU
-t #:刷新时间间隔
-o {HTML|CSV}:输出格式
-f /PATH/TO/OUTPUT_DIR:输出路径
glances -s -B IPADDR -------S服务器模式
# glances -s -B 172.16.1.1 & ------挂于后台
glances -c IPADDR ---------C客户端模式
# glances -c 172.16.1.1 ----连接服务器主机即可
# rpm -q glances
# glances
10、dstat
dstat ----------系统资源监控工具,支持实时刷新
dstat [-afv] [options..] [delay [count]]
常用选项:
-c:CPU相关
-d:磁盘相关
-g:page相关
-n:Interface相关
-y:系统相关
--tcp:TCP连接相关
--udp:UDP连接相关
--raw:裸套接字相关
--socket:套接字相关
--top-cpu:最占用CPU的进程
--top-io:最占用IO的进程
[delay [count]] 刷新间隔、刷新次数
三、进程管理
1、kill
kill ------------结束和查看进程
kill [-s signal | -signal] pid...
查看信号的信息:kill -l [signal]
# kill 2892
# kill -l -----------查看所有进程(信号)
有效的信号表示方法:数字编码、完整名称、信号的简写名称。
常用的有效信号:
1) SIGHUP:无需关闭,重新读取自身配置文件
2) SIGINT:终止前台进程
9) SIGKILL:终止正在运行进程
15) SIGTERM:默认信号,终止正在运行的进程
18) SIGCONT:转入后台运行
19) SIGSTOP:转入后台停止
# kill 3725
2、pkill
pkill -----------------跟据模式终止进程,可能生死相似进程,不建议使用
3、killall
killall ----------根据名字结束进程
选项:
-l:显示可结束的信号,即可支持的信号
# killall -l
# killall tail
四、进程作业管理
1、jobs
jobs ----------查看当前有多少命令运行在后台
jobs
2、fg
fg -------------- 后台-->前台
fg [JOB_ID]
# fg 3725
3、bg
bg ------------- 前台-->后台
格式:bg [JOB_ID]
# bg 2892
同样是【前台转后台】的三种方法如下:
Ctrl+z
# COMMAND &
# nohup COMMAND &
4、后台进程终止
格式:kill %JOB_ID
# kill %1
五、调整进程
1、nice
nice --------修改优先级,【启动进程时】,指定的nice值
格式:nice [OPTION] [COMMAND [ARG]...]
选项:
-n NICE:指定NICE值
# nice -n -10 bash &
2、renice
renice ---------修改【已启动】进程的NICE值
格式:
renice [-n] priority [[-p] pid ...]
选项:
-n NICE:调整指定的进程的优先级
# renice -n 5 -p 2245
六、进程调度
1、进程相关知识点
进程调度,通过特定的守护进程来实现,包括atd、crond两类。atd将预先编写好的命令在未来某个时间点【执行一次】;crond将预先编写好的命令在未来的符合条件的时间点【重复执行】。
查看: --------running/active表正常工作
CentOS6:# service atd status
# service crond status
CentOS7:# systemctl status atd.service
# systemctl status crond.service
邮件:
所有的进程调度的结果都会以电子邮件的方式发送到用户的邮箱中
格式:
mail [-s SUBJECT] USERNAME[@HOSTNAME]
2、at命令
at -------------进程及命令管理
格式:at [option] TIME
TIME的四种方式为:(1)、HH:MM [YYYY-mm-dd];(2)、noon、midnight、teatime;(3)、tomorrow;(4)、now+#UNIT UNIT为min、hours、days、weeks、months、years
选项:
-q QUEUE
-f FILE
-l:查看队列
-d JOB_ID:清除指定的计划作业
-c:查看指定的作业内容
# at -q QUEUE_NAME TIME
# at 9:20 ls
# at -f ling.sh 9:22
3、crontab命令
(1)、cron任务
周期性执行任务计划,,即cron任务。cron任务分为两类:系统cron任务(/etc/crontab)、用户cron任务(/var/spool/cron/USERNAME)
对于系统cron任务,五个 * 定义了周期执行任务的时间;user-name 是运行此任务的用户账户身份;其后接命令行参数。
对于用户cron任务,不需指明用户身份,少一字段。
(2)、crontab命令
格式:crontab [-u user] [-l | -r | -e] [-i]
选项:
-u USERNAME:编辑其他用户cron
-l:查看被计划的任务
-e:vi编辑器编辑crontab文件
-r:移除所有计划
-i:交互
# crontab -e
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart 表示每晚的21:30重启apache。
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart 表示每月1、10、22日的4 : 45重启apache。
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart 表示每周六、周日的1 : 10重启apache。
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart 表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart 表示每星期六的11 : 00 pm重启apache。
* */1 * * * /usr/local/etc/rc.d/lighttpd restart 每一小时重启apache
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart 晚上11点到早上7点之间,每隔一小时重启apache
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart 每月的4号与每周一到周三的11点重启apache
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart 一月一号的4点重启apache
进程管理