进程的概念:

  在Linux系统当中所有的命令都有操作或者运行权限,同一个命令对于不同用户就有不同权限,这些权限都属于文件的属性信息。因此我们也大概知道,在Linux系统当中,触发一个事件时,系统都会将他定义成一个进程。

内核的功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安

全功能等

Process: 运行中的程序的一个副本,是被载入内存的一个指令集合

进程ID(Process ID,PID)号码被用来标记各个进程

UID、GID、和SELinux语境决定对文件系统的存取和访问权限,

通常从执行进程的用户来继承

存在生命周期

task struct:Linux内核存储进程信息的数据结构格式

task list:多个任务的的task struct组成的链表

进程创建:

init:第一个进程

父子关系

进程:都由其父进程创建,CoW

fork(), clone()


根据进程与系统终端的关系可将进程分为:守护进程和前台进程

守护进程:在系统引导的过程中启动的进程,即跟终端无关的进程。

前台进程:跟终端相关,通过终端启动的进程,需要注意的是,也可以把在前台启动的进程送往后台,                       

进程在被内核调度的过程中的状态也可分为好多种:运行态,

                                              就绪态,

                                              睡眠态 :可中断睡眠 

                                                       不可终端睡眠:通常是被指IO阻塞的进

                                                        程,等待IO满足之前无法继续运行                                              

                                              僵死态 :孤魂野鬼,找不到归宿,父进程不来收

                                                       尸或者父进程已经挂了

                                              停止态: stopped不可被调度并运行

进程优先级:

   系统优先级:数字越小,优先级越高

   0-139(CentOS4,5)

  各有140个运行队列和过期队列

  0-98,99(CentOS6)

  实时优先级: 99-0:值最大优先级最高

  nice值:-20到19,对应系统优先级100-139或99

Big O:时间复杂度,用时和规模的关系

  O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)

 

进程的分类:

CPU-Bound:CPU密集型,非交互

IO-Bound:IO密集型,交互

Linux系统状态的查看及管理工具:pstree, ps, pidof,

pgrep, top, htop, glance, pmap, vmstat, dstat, kill,

pkill, job, bg, fg, nohup

pstree命令:

pstree - display a tree of processes

ps: process state

ps - report a snapshot of the current processes

Linux系统各进程的相关信息均保存在/proc/PID目录下

的各文件中                                                

进程的相关命令: top pstree ps pidof pgrep pkill htop glances pmap vmstat dstat iostat sar

                 kill job bg fg等

ps:查看系统的信息

适用ps来查看进程信息

ps [OPTION]...

支持三种选项:

UNIX选项 如-A -e

BSD选项 如a

GNU选项 如--help

  选项:默认显示当前终端中的进程

  a 选项包括所有终端中的进程

  x 选项包括不链接终端的进程

  u 选项显示进程所有者的信息

  f 选项显示进程的父进程

  k|--sort 属性 对属性排序

  o 属性… 选项显示定制的信息

pid、comm、%cpu、%mem、state、tty、euser、ruser

常用的组合方式:

 1.ps -ef 以完整的信息显示所有进程的信息

 2.ps aux

 3.ps axo

psr:当前进程运行的cpu

pri:当前进程的优先级

ni:显示当前进程的nice值


uptime

显示当前时间,系统已启动的时间、当前上线人数,系统平

均负载(1、5、10分钟的平均负载,一般不会超过1)

系统平均负载:

指在特定时间间隔内运行队列中的平均进程数

通常每个CPU内核的当前活动进程数不大于3,那么系统

的性能良好。如果每个CPU内核的任务数大于5,那么此

主机的性能有严重问题

如果linux主机是1个双核CPU,当Load Average 为6的

时候说明机器已经被充分使用


进程管理工具:

top

       op:有许多内置命令:

排序:

     P:以占据的CPU百分比,%CPU

     M:占据内存百分比,%MEM

     T:累积占据CPU时长,TIME+

     首部信息显示:

     uptime信息:l命令

     tasks及cpu信息:t命令

     cpu分别显示:1 (数字)

     memory信息:m命令

     退出命令:q

     修改刷新时间间隔:s

     终止指定进程:k

    保存文件:W

top命令

      us:用户空间

      sy:内核空间

      ni:调整nice时间

      id:空闲

      wa:等待IO时间

      hi:硬中断

      si:软中断(模式切换)

      st:虚拟机偷走的时间

      -d #: 指定刷新时间间隔,默认为3秒

      -b: 全部显示所有进程

      -n #: 刷新多少次后退出



 htop界面所支持的一些交互式命令:

        htop命令:需从Fedora-EPEL源安装

              http://172.16.0.1/fedora-epel/7/x86_64

              选项:

                  -d #: 指定延迟时间;

                  -u UserName: 仅显示指定用户的进程

                  -s COLUME: 以指定字段进行排序

             子命令:

                   s: 跟踪选定进程的系统调用

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

                   a:将选定的进程绑定至某指定CPU核心

                   t: 显示进程树

内存工具


   vmstat命令:虚拟内存信息

         vmstat [options] [delay [count]]

         vmstat 2 5

      procs:

         r:可运行(正运行或等待运行)进程的个数,和核心数有关

         b:处于不可中断睡眠态的进程个数(被阻塞的队列的长度)

      memory:

         swpd: 交换内存的使用总量

         free:空闲物理内存总量

         buffer:用于buffer的内存总量

  cache:  用于cache的内存总量

     swap:

        si:从磁盘交换进内存的数据速率(kb/s)

        so:从内存交换至磁盘的数据速率(kb/s)

  io:

       bi:从块设备读入数据到系统的速率(kb/s)

       bo: 保存数据至块设备的速率

system:

       in: interrupts  中断速率,包括时钟

       cs: context switch  进程切换速率

 cpu:

       us:Time spent running non-kernel code

       sy: Time spent running kernel code

       id: Time spent idle. Linux 2.5.41前,包括IO-wait time.

       wa: Time spent waiting for IO.  2.5.41前,包括in idle.

       st: Time stolen from a virtual machine.  2.6.11前, unknown.

选项:

    -s: 显示内存的统计数据

iostat:

       统计CPU和设备IO信息

    示例:iostat 1 10

 pmap命令:进程对应的内存映射

 pmap [options] pid [...]

    -x: 显示详细格式的信息

    示例: pmap 1

  另外一种实现:

     cat /proc/PID/maps


系统监控工具:glaces 

glaces:是一款用于Linux,BSD的开源命令系统监控工具,它使用python语言开发,能够监视cpu,负载,                内存,磁盘io,网络流量,文件系统,系统温度等信息

   glaces:

           常用选项:

         -b: 以Byte为单位显示网卡数据速率

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

         -f /path/to/somefile: 设定输入文件位置

         -o {HTML|CSV}:输出格式

         -m: 禁用mount模块

         -n: 禁用网络模块

         -t #: 延迟时间间隔

         -1:每个CPU的相关数据单独显示

系统监控工具

     C/S模式下运行glances命令

     服务器模式:

    glances -s -B IPADDR

   IPADDR: 指明监听的本机哪个地址

客户端模式:

   glances -c IPADDR

   IPADDR:要连入的服务器端地址

dstat命令:系统资源统计,代替vmstat,iostat

dstat [-afv] [options..] [delay [count]]

         -c: 显示cpu相关信息

         -C #,#,...,total

         -d: 显示disk相关信息

         -D total,sda,sdb,...

         -g:显示page相关统计数据

         -m: 显示memory相关统计数据

         -n: 显示network相关统计数据

         -p: 显示process相关统计数据

         -r: 显示io请求相关的统计数据

         -s: 显示swapped相关的统计数据

 at任务

      包:at

     at命令:at [option] TIME

    常用选项:

         -V 显示版本信息:

         -l: 列出指定队列中等待运行的作业;相当于atq

         -d: 删除指定的作业;相当于atrm

         -c: 查看具体作业任务

         -f /path/from/somefile:从指定的文件中读取任务

         -m:当任务被完成之后,将给用户发送邮件,即使没有标准输出

 注意:作业执行命令的结果中的标准输出和错误以邮件通知给相关用户

     TIME:定义出什么时候进行 at 这项任务的时间

       HH:MM [YYYY-mm-dd]

       noon, midnight, teatime(4pm)

       tomorrow

       now+#{minutes,hours,days, OR weeks}

  at时间格式

   HH:MM  02:00   

       在今日的 HH:MM 进行,若该时刻已过,则明天此时执行任务

      HH:MM YYYY-MM-DD   02:00 2016-09-20

      规定在某年某月的某一天的特殊时刻进行该项任务

      HH:MM[am|pm] [Month] [Date]

         04pm March 17

         17:20 tomorrow

   HH:MM[am|pm] + number [minutes|hours|days|weeks]

     在某个时间点再加几个时间后才进行该项任务

        now + 5 minutes

        rax02pm + 3 days

at任务的执行方式:

1)交互式 2)输入重定向 3)at –f 文件

依赖与atd服务,需要启动才能实现at任务

at队列存放在/var/spool/at目录中

/etc/at.{allow,deny}控制用户是否能执行at任务

白名单:/etc/at.allow 默认不存在,只有该文件中的用户

才能执行at命令

黑名单:/etc/at.deny 默认存在,拒绝该文件中用户执行

at命令,而没有在at.deny 文件中的使用者则可执行

如果两个文件都不存在,只有 root 可以执行 at 命令


周期性任务计划cron

周期性任务计划:cron

相关的程序包:

cronie: 主程序包,提供crond守护进程及相关辅助工具

cronie-anacron:cronie的补充程序,用于监控cronie任

务执行状况,如cronie中的任务在过去该运行的时间点未能正常

运行,则anacron会随后启动一次此任务

crontabs:包含CentOS提供系统维护任务

计划任务

确保crond守护处于运行状态:

    CentOS 7:

   systemctl status crond

   CentOS 6:

   service crond status

  计划周期性执行的任务提交给crond,到指定时间会自动运行

  系统cron任务:系统维护作业

      /etc/crontab

        用户cron任务:

       crontab命令

        日志:/var/log/cron

  计划任务

时间表示法:

   (1) 特定值

给定时间点有效取值范围内的值

  (2) *

给定时间点上有效取值范围内的所有值

表示“每...”

  (3) 离散取值

     #,#,#

  (4) 连续取值

      #-#

(5) 在指定时间范围上,定义步长

   /#: #即为步长

计划任务

   系统的计划任务:

    /etc/crontab

    /etc/cron.d/  配置文件

    /etc/cron.hourly/  脚本

    /etc/cron.daily/ 脚本

    /etc/cron.weekly/ 脚本

    /etc/cron.monthly/脚本

anacron系统

运行计算机关机时cron不运行的任务,CentOS6以后版本

取消anacron服务,由crond服务管理

对笔记本电脑、台式机、工作站、偶尔要关机的服务器及其

它不一直开机的系统很重要对很有用

配置文件:/etc/anacrontab,负责执行/etc/ cron.daily

/etc/cron.weekly /etc/cron.monthly中系统任务。

  字段1:如果在这些日子里没有运行这些任务……

  字段2:在重新引导后等待这么多分钟后运行它

  字段3:任务识别器,在日志文件中标识

  字段4:要执行的任务

由/etc/cron.hourly/0anacron执行

当执行任务时,更新/var/spool/anacron/cron.daily 文件

的时间戳


CentOS6使用/etc/cron.daily/tmpwatch定时清除临时文件

CentOS7使用systemd-tmpfiles-setup服务实现

配置文件:

/etc/tmpfiles.d/*.conf

/run/tmpfiles.d/*.conf

/usr/lib/tmpfiles/*.conf

/usr/lib/tmpfiles.d/tmp.conf

d /tmp 1777 root root 10d

d /var/tmp 1777 root root 30d

命令:

systemd-tmpfiles –clean|remove|create  configfile

用户cron:

crontab命令定义,每个用户都有专用的cron任务文件:

/var/spool/cron/USERNAME

crontab命令:

crontab [-u user] [-l | -r | -e] [-i]

-l: 列出所有任务;

-e: 编辑任务;

-r: 移除所有任务;

-i:同-r一同使用,以交互式模式移除指定任务

-u user: 仅root可运行,指定用户管理cron任务

控制用户执行计划任务:

/etc/cron.{allow,deny}


at和crontab

一次性作业使用 at

重复性作业使用crontab

计划任务

注意:运行结果的标准输出和错误以邮件通知给相关用户

(1) COMMAND > /dev/null

(2) COMMAND &> /dev/null

对于cron任务来讲,%有特殊用途;如果在命令中要使用%,

则需要转义,将%放置于单引号中,则可不用转义