Linux进程管理与任务计划

 进程相关的概念

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

  程序和进程的关系:

    程序表现为磁盘上的一个文件(静态的概念)

    当执行程序时,会在内存中开启一块区域,系统分配一个唯一的编号叫PID,执行结束时会释放这块区域(动态的)

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

  进程创建:

    init:第一个进程

    进程:都由父进程创建

    CoW:copy on write 写时复制,父进程和子进程占用同一块内存空间,当子进程有写操作时,才在内存中开辟新的内存空间

  进程优先级

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

      0-98,各有99个运行队列和过期队列

    实时优先级

    nice优先级

  进程内存:

    Page Frame:页框,用于存储页面数据,存储Page 4K

    LRU:Least Recently Used 近期最少使用算法,释放内存

      假设序列为4 3 4 2 3 1 4 2,物理块有三个,则

        第一轮 4调入内存 4

        第二轮 3调入内存 3 4

        第三轮 4调入内存 4 3

        第四轮 2调入内存 2 4 3

        第五轮 3调入内存 3 2 4

        第六轮 1调入内存 1 3 2

        第七轮 4调入内存 4 1 3

        第八轮 2调入内存 2 4 1

    物理地址空间和线性地址空间

      MMU:Memory Management Unit负责转换线性和物理地址

  IPC:Inter Process Communication

    同一主机:signal:信号

        shm:shared memory

        semaphore:信号量

    不同主机:socket:IP和端口号

        RPC:remote procedure call  远程过程调用

        MQ:消息队列,kafka

    Linux内核:抢占式多任务

  进程类型:

    守护进程(后台进程):daemon,在系统引导过程中启动的进程,和终端无关进程

    前台进程:跟终端相关,通过终端启动的进程

    注意:两者可互相转化

  进程状态与基本转换:

    运行态:running

    就绪态:ready

    睡眠态:

      可中断:interruptable

      不可中断:uninterruptable

    停止态:stopped,暂停于内存,但不会被调度,除非手动启动

    僵死态:zombie,结束进程,父进程结束前,子进程不关闭

  常用工具:

    pstree:显示进程树

      pstree -p

    ps命令

      支持三种选项:

        UNIX选项 which may be grouped and must be preceded by a dash

        BSD选项  which may be grouped and must not be used with a dash    

        GUN选项 which are preceded by two dashes

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

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

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

        x:选项包括与终端无关的进程

        f:显示父子进程

        k 属性:对属性排序,属性前加-表示倒叙

        o 属性,...:显示定制的信息pid、cmd、%cpu、%mem

        L:支持的属性列表

    ps输出属性:

      VSZ:Virtual memory size,虚拟内存集,线性内存  进程自己以为占用的内存

      RSS:Resident Size,常驻内存集  系统给真正分配的内存

      STAT:进程状态

        R:running

        S:interruptable sleeping

        D:uninterruptable sleeping

        T:stopped

        Z:zombie

        +:前台进程

        <:高优先级进程

        l:多线程进程

        s:session leader,会话(子进程)发起者

      ni:nice值

      pri;priority优先级,与system优先级相反

      psr:process CPU编号

      rtprio:实时优先级

      实例:ps axo pid,cmd,psr,ni,pri,rtprio

         ps  -C f1.sh  查看f1.sh这个脚本的状态

 

   进程管理工具

    top命令

    选项:

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

      -b:显示所有进程

    栏位信息简介

      us;用户空间

      sy:内核空间

      ni:调整nice时间

      id:空闲

      wa:等待IO时间

      hi:硬中断

      si:软中断

      st:虚拟机偷走的时间

    top:有许多内置命令:

      排序:

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

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

        T:累计占据CPU时长排序,TIME+

      首部信息显示:

        uptime信息:l命令

        tasks及cpu信息:t命令

        cpu分别显示:1

        memory信息:m命令

      退出命令:q

      修改刷新时间间隔:s

      终止指定进程:k

    htop命令(在epel源)

      子命令:

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

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

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

        t:显示进程树

   内存空间使用状态

    free命令

      选项:

        -b:以字节为单位

        -m:以MB为单位

        -g:以GB为单位

        -h:易读格式

    vmstat命令:虚拟内存信息

      vmstat 2 5  两秒刷新一次,5次后退出

      procs

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

        b:处于不可中断睡眠态的进程个数

      memory:

        swpd:交换内存的使用总量

        free:空闲物理内存总量

        buffer:用于buffer的内存总量

        cache:用于cache的内存总量

      swap:

        si:从磁盘交换进内存的数据速率

        so:从内存交换至磁盘的数据速率

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

       pmap [options] pid [...]

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

      另一种实现:

        cat /proc/PID/maps

    pidof cmd:查看命令的PID

    kill命令:

      向进程发送控制信号,以实现对进程管理,每个信号对应一个数字,信号名称以SIG开头,不区分大小写

      显示当前系统可用信号:kill -l,trap -l

      常用信号:man 7 signal

        1)SIGHUP:无须关闭进程而让其重读配置文件

        2)SIGINT:终止正在运行的进程;相当于Ctrl+c

        3)SIGQUIT:相当于Ctrl+  (在一些命令,比如bc,cat等,结果为退出)

        9)SIGKILL:强制杀死正在运行的进程

        15)SIGTERM:终止正在运行的进程   (相当于什么都不加的kill)

        18)SIGCONT:继续运行

        19)SIGSTOP:后台休眠

      指定信号的方法:

        1)信号的数字标识:1,2,9

        2)信号完整名称:SIGHUP

        3)信号的简写名称:HUP

      按PID:kill [-SIGNAL] pid ...

        kill -n SIGNAL pid

      按名称:killall cmd

  作业管理

    Linux的作业控制:

      前台作业:通过终端启动,且启动后一直占据终端

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

    让作业运行于后台

      1)运行的中作业:Ctrl+z

      2)尚未启动的作业:COMMAND &

    后台作业虽然被送往后台运行,但其依然于终端有关;退出终端,将关闭后台作业。如果希望送到后台后,剥离与终端的关系

      nohup COMMAND &>/dev/null  &

      screen;COMMAND

    查看当前终端所有作业:jobs

    作业控制:

      fg [[%]JOB_NUM]:把指定的后台作业调回前台

      bg[[%]JOB_NUM]:让送往后台的作业在后台继续运行  

      kill [[%]JOB_NUM]:终止指定的作业  

    并行运行:同时运行多个进程,提高效率

      1)vim all.sh

         ping 127.1 &

         ping 127.2 &

         ping 127.3 &

      2)(ping 127.1 &);(ping 127.2 &);(ping 127.3 &)

      3){ping 127.1 & ping 127.2 & ping 127.3 &}


 

 任务计划

Linux任务计划,周期性任务执行

  1.未来的某时间点执行一次任务

    at任务

      包:at

      at [OPTION] TIME

      常用选项:

        -l:列出指定队列中等待运行的作业

        -c:查看具体作业任务

        -d:删除指定的作业

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

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

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

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

        黑名单:/etc/at.deny默认存在,拒绝该文件中用户执行at命令,而没有在at.deny文件中的使用者则可执行

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

        有了allow文件之后,deny文件就失效了

  2.周期性运行某任务

    相关的程序包:

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

      cronie-anacron:cronie的补充程序用于监控cronie任务执行情况

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

    /etc/crontab   

    SHELL=/bin/bash
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    # 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
    # |  |  |  |  |
    # *  *  *  *  * user-name  command to be executed
  在执行任务计划的时候,cron中的PATH变量可能有问题,最好在脚本中加上PATH变量
    时间表示法:
      1)特定值
        给定时间点有效取值范围内的值
      2)*
        给定时间点上有效取值范围内的所有值
      3)离散取值
        #,#,#
      4)连续取值
        #-#
    day of mounth和day of week是或者的关系
    日志文件在/var/log/cron
    crontab命令定义
      每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME
    crontab命令选项;
      -l:列出当前用户所有任务
      -e:编辑任务
      -r:移除当前用户的所有任务
    控制用户执行计划任务:
      /etc/cron.{allow,deny}
 
    根用户能够修改其他用户的作业

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

    1)COMMAND > /dev/null

    2)COMMAND &> /dev/null

   对于cron任务来讲,%又特殊用途,如果在命令中要使用%,需要转义,或者将%放置于单引号中,就不需要转义,写一个脚本最好

   sleep命令:

    sleep NUMBER[SUFFIX]...

      SUFFIX:

        s:秒,默认

        m:分

        h:小时

        d:天

 ntp同步时间

  1.ntpdate 172.20.0.1

  2.centos7

    vim /etc/chrony.conf

    server 172.20.0.1 iburst

  3.systemctl enable chronyd

   systemctl start chronyd

练习

  1.每周的工作日1:30,将/etc备份至/backup目录中,保存的文件名称格式为“etcbak-yyy-mm-dd-HH.tar.xz”,其中日期是前一天的时间

  2.每两小时去除当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中

  3.工作日时间,每10分钟执行一次磁盘空间检查,一旦发现任何分区利用率高于30%,就执行wall警报 

    

        

原文地址:https://www.cnblogs.com/hjmLinux/p/12529636.html