zoukankan      html  css  js  c++  java
  • 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警报 

        

            

  • 相关阅读:
    set-find
    set-equal_range
    set-equal_range
    set-erase
    php 抽象类 静态 单体设计模式
    Servlet 工作原理解析
    职场上一个人情商高的十种表现
    快速学习一门新技术入门
    php中14中排序方式的实现
    php中对Mysql数据库的访问操作
  • 原文地址:https://www.cnblogs.com/hjmLinux/p/12529636.html
Copyright © 2011-2022 走看看