在上一篇中已经写了一些进程管理的相关命令:

    pstree, ps,pgrep,pidof, top

下面继续:

vmstat ---- 显示虚拟内存统计

    格式: vmstat [options] [delay [count]]

    显示结果摘要:

procs-----------memory-------------swap-- -----io---- -system-- ------cpu-----
 r b   swpd   free  buff cache   si  so    bi   bo  in   cs us sy id wa st
 1 0      0172900      0 902768   0   0     4    0  16   24  0  0100  0 0

    其结果中的内容:

    Procs

        r:可运行的进程数(运行或等待时间)

       b: 不间断睡眠中的进程数

    Memory:

        swpd:所使用的虚拟内存量

        free:空闲内存量

        buff:用作缓冲区的内存量

        cache:用作缓存的内存量

        inact:非活动内存量 (得加 -a 选项)

        active:活动内存量 (得加 -a 选项)

    Swap (过大说明系统内存应该升级了)

        si:从磁盘交换的内存量

        so:交换到磁盘的内存数量

    IO (保持一定范围居高不下则硬盘速度到瓶颈)

        bi:从块设备接受的块

        bo:发送到块设备的块

    System

        in:每秒中断的次数包括时钟

        cs:每秒上下文开关的数目

    CPU --- 这是总CPU 时间的百分比

        us:运行非内核代码的时间

        sy:运行内核代码所花费的时间

        id:闲置时间Linux 2.5.41之前这包括IO等待时间.

        wa:等待IO的时间, Linux 2.5.41之前包括空闲时间.

        st:从虚拟机中窃取的时间

    选项:

        -s:/proc/meminfo文件中抽取的信息并加工后输出;

        -a:显示内存的活动与非活动信息

    delay: 按照delay所指示的时间重复执行vmstat命令默认单位为秒;

    count: 重复执行vmstat命令的次数;

    注意: /proc下的内容通产只能用输出重定向修改一般不用vi编辑器

pmap ---- 报告进程的内存映射

    格式: pmap [options] pid [...]

    显示结果摘要:

              00007f647a279000           44K r-x-- libnss_files-2.17.so
              00007f647a284000          2044K----- libnss_files-2.17.so
              64
位内存地址              大小  权限       数据

    选项

        -x,--extended: 显示扩展的信息

htop(默认没有需额外安装) ---- 交互式进程查看器

    格式: htop [-dChusv]

    常用选项:

        -d#:htop刷新的间隔时间;

       -uUSERNAME: 显示指定用户的进程

        -sCOLUME_NAME: 根据指定字段进行排序;

    交互式命令:

        l:显示指定进程打开的文件列表

        tF5: 显示进程树结构以显示之间的父子关系

        a:将选定的进程绑定到某指定的CPU核心上运行;

glances(默认没有需额外安装) ---- 基于跨平台的监视工具(可访问远程的服务器资源)

    格式: glances [-bdmnl] [-t refresh] [-f file][-o output]

    常用选项:

        -b:KByte为单位显示网卡的数据速率

        -d:关闭磁盘I/O模块

        -m:关闭Mount模块

        -n:关闭Network模块

        -l:单独显示每颗CPU核心的数据统计信息;

        -t#: 设定刷新时间间隔

        -o{HTML|CSV}: 为输出数据指定输出的格式

        -f/PATH/TO/OUTPUT_DIR: 指定输出文件的路径, glances.html

    glances可以工作于C/S模型下:

        S:服务器模式

            glances-s-B IPADDR

                IPADDR:服务器本地的某个IP地址

        C:客户端模式

            glances-cIPADDR

                IPADDR:远程服务器指定监听的IP地址;

dstat(默认没有需额外安装) ---- 生成系统资源统计的通用工具

    格式: dstat [-afv] [options...] [delay[count]]

    常用的选项:

        -c,--cpu: 显示CPU相关的信息;

        -d,--disk: 显示磁盘相关的信息;

        -g,--page: 显示page相关的信息;

        -n,--net: 显示与Interface相关信息;

        -y,--sys: 显示与系统相关的信息;

        --tcp:显示与TCP连接状态相关的信息

        --udp:显示与UDP连接有关的信息

        --socket:显示网络统计数据

        --top-cpu:显示最占用CPU资源的进程

        --top-io:显示最占用IO的进程;

        --top-mem:显示占用最多内存的进程;

        --top-bio:指出块I/O最大的进程

进程管理类命令: kill, pkill, killall

kill ---- 终止指定的进程

    格式: kill [-s signal | -signal] pid ...

    查看信号的信息:

        kill-l[signal]

    有效的信号表示方法:

        1.使用信号的数字编码进行表示

        2.使用信号的完整名称进行表示

        3.使用信号的简写名称进行表示简写名称就是完整名称中不包括"SIG"的其余部分

    常用的信号:

        1)SIGHUP: 无需关闭对应进程而让其重新读取自身的配置文件

        2)SIGINT: 终止正在运行的前台进程

        9)SIGKILL: 没有任何预兆的终止正在运行的进程

        15)SIGTERM: 默认信号终止正在运行的进程

        18)SIGCONT: 让转入后台的进程继续运行

        19)SIGSTOP: 让进程转入后台并停止运行

killall ---- 按名称杀死进程

    格式: killall PROCESS_NAME

pkill ---- 根据进程名进行杀死进程

进程作业管理命令: jobs, bg, fg, nohup

 进程作业分为前台作业与后台作业;

  前台作业:(foreground job)通过终端启动并且启动后会一直占据终端的进程;

  后台作业:(background job)可以通过终端启动,但启动后立即转入后台运行,释放终端;

 如何让作业工作于后台:

  1.正在运行的前台作业:

    快捷键:Ctrl+z

    注意:实际上是向此进程发送SIGSTOP信号,使得该进程转入后台以后即停止运行;

  2.尚未启动的作业,使其启动并转入后台;

    在命令后面空格,然后再加&;示例:# COMMAND &

    注意:此类作业是从前台启动,启动后立即转入后台,但即便如此,此进程也是与终端相关的进程;如果终端关闭,则此类进程也会终止;

  3.尚未启动的作业,使其启动并转入后台,同时剥离其与终端的关联;

    在命令前加nohup,命令后加&;示例:# nohup COMMAND &

  查看后台作业的信息: jobs

  将后台作业转入前台运行: fg [JOB_ID]

  使前台作业转入后台运行: bg [JOB_ID]

  终止后台作业: kill %JOB_ID 

调整进程优先级的命令: nice, renice

  使用nice调整进程的静态优先级:

     NICE值的取值范围是: -20 ---- 19

    默认情况下,所有用户进程的初始NICE值都是0: 默认优先级为120;

  注意;只有超级用户root才能使用负NICE值提升进程的优先级;普通用户只能使用正NICE值来降低进程的优先级;

  nice:启动进程的时候直接指定进程的NICE值;

    格式:nice [OPTION] [COMMAND [ARG]...]

    选项:

     -n NICE:指定NICE值

  renice:针对于已经启动的进程修改其NICE值;

    格式:renice [-n] priority [[-p] pid ...]

    选项:

     -n NICE:调整指定的进程的优先级,在原有的NICE值的基础上,再加上此处指定的NICE值;

 其他相关的命令:sar, iostar, mpstat, p1

idstat, tsar, iftop, nethog...

Linux系统的进程调度(任务调度)(Linux中不允许同时被两个或多个进程修改文件)

  进程调度:在未来某个时间点,让系统自动执行我们实现编写好的命令或脚本的列表,从而使得即使用户不再计算机旁边也可以按时完成任务;

  为了能够进行进程调度,就必须要有一种机制能够识别时间发生的时间并且能够运行用户所预期的命令;这种机制在Linux中是通过特定的守护进程来实现的;

    这类守护进程包括:

     atd:将预先编写好的命令在未来某个时间点执行一次;

     crond:将预先编写好的命令在未来的符合条件的时间点重复执行;

    查看此类守护进程是否正常运行;

    CentOS 6: service {atd|crond} status

        结果为running或者"正在运行",都表示其正常工作

    CentOS 7: systemctl status {atd.service|crond.service}

        结果为active(running)就表示其正常工作

    所有的进程调度的结果都会以电子邮件的方式发送到用户的邮箱中;

     本地电子邮件服务:

       SMTP: Simple Mail Transfer Protocol, 简单邮件传输协议, TCP/25

        POP3: Post-Office Protocol Version 3, 邮局协议第三版, TCP/110

       IMAP4: Internet Mail Access Protocol Version4, 互联网邮件访问协议第四版, TCP/43

     整个电子邮件系统分成四大部分:

        MUA:Mail UserAgent,邮件用户代理,帮助用户发送电子邮件到服务器或者帮助用户从服务器接受电子邮件的应用程序;

        MTA(Mail TransferAgent)邮件传输代理,将来自MUA的信件转发给指定用户的程序

        MDA(Mail DeliveryAgent)邮件投递代理,将MTA接受的信件依照信件的流向(送到哪里)将该信件放置到本机账户下的邮件文件中(收件箱)

        MRA

     常用的MUA:浏览器, Outlook, Foxmail, mail|mailx

      在linux中发送邮件的格式:

     mail [-s SUBJECT]USERNAME[@HOSTNAME]

     Linux中用户的邮箱:/var/spool/mail/USERNAME 

  atd守护进程能够识别和完成有at命令, batch命令制作的任务计划;

  at命令:

  at,batch,atq,atq,atrm-queue,examine or delete jobs for later exection

   at命令执行流程:

    # at 2:05 tomorrow

    at>/home/kyle/do_job

    at> Ctrl+D

    AT Time中的时间表示方法

   格式:at [option] TIME 

    TIME:

     1.HH:HH [YYYY-mm-dd]

     2.noon, midnight, teatime, tomorrow

     3.tomorrow

     4.now+#UNIT UNIT:min, hours, days, weeks, months, years...

    示例:at -f atfile(命令文本) 17.00

   at定义的作业有队列的概念,通常队列使用单个字母来表示,默认是a;

    at -q QUEUE_NAME TIME

    选项:

     -q QUEUE 使用指定的伫列(Queue)来储存,at的资料是存放在所谓的queue中,使用者可以同时使用多个queue,而queue的编号为a,b,c... z以及A,B,...Z共52个

     -f FILE 读入预先写好的命令档。使用者不一定要使用交谈模式来输入,可以先将所有的指定先写入档案后再一次读入网络应用

     -l:查看指定的计划作业,相当于atq

     -d JOB ID:清楚指定的计划作业,相当于atrm

     -c:查看指定的作业的内容

     -v:列出所有已经完成但尚未删除的指定

     -V:印出版本编号

 batch命令:

  batch命令在定义任务的时候,无需指定时间,是由系统自行选择在系统比较空闲的时候,完成此计划任务;其他的配置与at完全相同;

 周期行执行任务计划:cron

  cronie软件包,提供crond守护进程以及cron的其他管理工具;

  cron任务通常分为两类:

    系统cron任务:/etc/crontab 保存cron任务

     SHELL=/bin/bash

     PATH=/sbin:/bin:/usr/sbin:/usr/bin

     MAILTO=root

     HOME=/

				# For details see man 4 crontabs

				# 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

注意:

    1.     * * * * *:定义周期执行任务的时间

            command to be executed: 应该执行的任务命令及命令行参数;

            注意:为了保证任务能够准确执行, 命令通常是用绝对路径填写;

    2.各个字段之间使用一个或多个空白字符进行分隔;

    3.任务运行的结果以邮件的方式直接发给发布任务的用户;

时间表示法:

    1.特定时间:给定时间点的有效取值范围内的所有有效值;如:0 5 3 9 *

    2.通配符时间:*,表示“每……“之意,给定时间点的所有有效值;如: * * * * *

    3.离散时间:在给定的时间点上,使用逗号分隔;如:0 8,20 * * 1,3,5

    4.连续时间:在给定的时间点上,使用减号分隔;如:0 8 * * 1-5

    5.步长时间:在给定的时间点上,使用除号分隔;如:*/2 * * * *

        注意:所除的数必须能整除,否则,无意义

crontab命令:

    格式:crontab [-u user] [-l | -r | -e] [-i]

    常用选项:

        -u USERNAME: 超级用户为其他用户设置或编辑用户cron任务时使用

        -l: 查看所有的已经被定义的计划任务

        -e: 使用vi编辑器编辑crontab文件

        -r: 移除所有的计划任务, 不推荐使用

        -i: 在使用-r选项时, 进行交互