下面是进程管理及其相关知识,主要分为六部分,分别是进程基础知识、进程查看(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