Linux之进程和计划任务

进程的概念

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

    Process: 运行中的程序的一个副本,是被载入内存的一个指令集合进程ID(Process ID,PID)号码被用来标记各个进程

             UID、GID、和SELinux 语境决定对文件系统的存取和访问权限,通常从执行进程的用户来继承

             存在生命周期

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

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

    进程创建:

        init:第一个进程

                父子关系

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

                fork(), clone()

进程优先级

    进程优先级

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

            0-139 (CentOS4,5)

                    各有140 个运行队列和过期队列 0-98 ,99 (CenOS6)

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

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

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

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

进程相关概念

    进程内存:

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

        LRU :Least Recently Used 近期最少使用算法, 释放内存物理地址空间和线性地址空间

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

    IPC: Inter Process Communication

        同一主机上

            signal

            shm: shared memory

            semophore 信号量,一种计数器

        不同主机上:

            rpc: remote procedure call

            socket: IP 和端口号

进程状态

    Linux 内核:抢占式多任务

    进程类型:

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

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

            注意:两者可相互转化

    进程状态:

        运行态:running

        就绪态:ready

        睡眠态:

            可中断:interruptable

            不可中断:uninterruptable

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

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

系统管理工具

    进程的分类:

        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 目录下的各文件

列举进程ps

     ps [OPTION]…

        支持三种选项:

            UNIX选项如-A -e

            BSD选项如a

            GUN选项如–help

        • 默认显示当前终端中的进程

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

blob.png

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

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

blob.png

            • f 选项显示进程的父进程

                          选项可组合使用:

blob.png

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

                pid 、comm 、%cpu 、%mem 、state 、tty 、euser(执行命令生效的用户)、ruser(执行此命令的用户)

                          部分结果图:

blob.png

进程管理工具

    VSZ: Virtual memory SiZe ,虚拟内存集,线性内存

    RSS: ReSident Size, 常驻内存集

    STAT:进程状态

       R:running

       S: interruptable sleeping(可中断的休眠)

       D: uninterruptable sleeping

       T: stopped

       Z: zombie

       +: 前台进程

       l: 多线程进程

       N:低优先级进程

       <: 高优先级进程

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

    常用组合:-ef

              -e: 显示所有进程

              -f: 显示完整格式程序信息

    常用组合:-eFH

              -F: 显示更完整格式的进程信息

              -H: 以进程层级格式显示进程相关信息

blob.png

    常用组合:自定义

              -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm

              axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm 

    ni:nice值

    pri:priority,优先级

    psr:processor,CPU编号

    rtprio:实时优先级

搜索进程

    最灵活:ps 选项 | 其它命令

    按预定义的模式:pgrep

blob.png

        pgrep [options] pattern

        -u uid: effective user ,生效者

        -U uid: real user ,真正发起运行命令者

        -t terminal: 与指定终端相关的进程

        -l: 显示进程名

        -a: 显示完整格式的进程名

        -P pid: 显示指定进程的子进程

    按确切的程序名称:/sbin/pidof

        $pidof bash

blob.png

系统工具

    uptime

blob.png

        显示当前时间,系统 已启动的时间、当前上线人数,系统平均负载(1 、5 、10 分钟的平均负载,一般不会超过1) )

    系统平均负载:

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

    如果每个CPU 内核的当前活动进程数不大于3 的话,那么系统的性能良好。 如果每个CPU 内核的任务数大于5 ,那么这台机器的性能有严重问题。

    如果linux主机是1个双核CPU的话,当Load Average为6的时候说明机器已经被充分会用了

进程管理工具

    top:有许多内置命令(先输入top进入界面):

        排序:

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

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

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

        首部信息显示:

            uptime信息:l 命令

            tasks及cpu信息:t 命令

            cpu分别显示:1 ( 数字)

            memory信息:m 命令 切换数字、图形方式显示

         退出命令:q

         修改刷新时间间隔:s

         终止指定进程:k

         保存文件:W

    选项

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

        -b: 以批次方式

        -n #: 显示n批次  然后结束退出

blob.png

栏位信息简介:可对应上图中的数据

    us:用户空间

    sy:内核空间

    ni:调整nice 时间

    id:空闲

    wa:等待IO 时间

    hi:硬中断

    si:软中断(模式切换)

    st:虚拟机偷走的时间

    PID (Process Id): 任务的进程ID

    PPID (Parent Process Pid): 父任务的进程ID

    RUSER (Real User Name): 任务的所有者真实名称

    UID (User Id): 任务所有者ID

    USER (User Name): 任务所有者名称

    GROUP (Group Name): 任务所有者群组名

    TTY (Controlling Tty): 终端

    PR (Priority): 优先级

    %CPU (CPU usage):CPU 使用率

    %MEM (Memory usage (RES)): 内存使用率

    S (Process Status): 进程状态

    TIME+ (CPU Time, hundredths):CPU

内存工具

    vmstat 命令:虚拟内存信息     可使用man帮助查看具体资料

        vmstat [options] [delay [count]]

        vmstat 2 5(表示两秒执行一次,执行五次后退出

blob.png

      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: 显示内存的统计数据

blob.png

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

    pmap [options] pid(进程编号) […]

blob.png

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

blob.png

        #pmap 1

        另外一种实现:

        # cat /proc/PID/maps

系统监控工具

    dstat 命令:系统资源统计  (需要自己安装)

    dstat [-afv] [options..] [delay [count]]   (动态观察)

blob.png

        -c: 显示cpu 相关信息

        -C #,#,…,total

        -d: 显示disk 相关信息

        -D total,sda,sdb,…

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

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

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

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

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

        -s: 显示swapped

      命令的组合使用:

        –tcp

        –udp

        –unix

        –raw

        –socket

        –ipc

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

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

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

        –top-latency: 显示延迟最大的进

进程管理工具

    kill 命令

        向进程发送控制信号,以实现对进程管理

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

blob.png

        常用信号:man 7 signal

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

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

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

            15) SIGTERM :终止正在运行的进程

            18) SIGCONT :继续运行

            19) SIGSTOP :后台休眠

        指定信号的方法:

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

            (2) 信号完整名称;SIGHUP

            (3) 信号的简写名称;HUP

作业管理

    Linux 的作业控制

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

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

    如何让作业运行于后台?

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

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

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

        # nohup COMMAND & #screen;COMMAND

    查看所有作业

        # jobs

    作业控制

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

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

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

blob.png

        jobs查询作业  然后fg 1返回操作界面

blob.png

并行运行进程

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

       1、编写脚本

        vi all.sh

            f1.sh&

            f2.sh&

            f3.sh&

       2、(f1.sh&);(f2.sh&);(f3.sh&)

       3、{ f1.sh& f2.sh& f3.sh& }

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

        at:未来的某时间点执行一次 任务

        batch:系统 自行选择空闲时间去执行此处指定的任务

        cron:周期性运行某任务

at任务

    at命令:at [option] TIME   适合一次性 临时性的任务

blob.png

                创建的at任务会存到/var/spool/at/目录下  cat可直接查看

    常用选项

        -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}

    HH:MM 02:00

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

    HH:MM YYYY-MM-DD 04: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

        04pm + 3 days

    执行方式

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

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

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

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

        先寻找/etc/at.allow 文件,文件用中的使用者才能使用 at,没有在这个文件中的使用者则不能使用 at(即使没有写在at.deny当中)

        如果/etc/at.allow 找 不存在,就寻找 /etc/at.deny 这个文件,若写在这个 at.deny 用 的使用者则不能使用 at ,而没有在这个 at.deny 文件中的使用用 者则可使用 at 命令。

        如果两个文件都不存在有,只有 root用可以使用at 这个命令

周期性计划任务cron

    周期性任务计划:cron

        相关的程序包:

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

            cronie-anacron :cronie 的补充程序;用于监控cronie任务执行状况;如cronie 中的任务在过去该运行的时间点未能正常运行,则anacron 会随后启动一次此任务

            crontabs :包含CentOS

    确保crond 守护处于运行状态

        CentOS 7:

            systemctl status crond

blob.png

        CentOS 6:

            service crond status

blob.png

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

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

            /etc/crontab

        用户cron 任务:

            crontab 命令

    日志:/var/log/cron

    系统cron 任务:/etc/crontab

    注释行以 # 开头

    详情参见 man 5 crontab

        # 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

blob.png

    例如:晚上9点10分运行echo 命令;

        10 21 * * * centos /bin/echo "Howdy!"

    时间表示法:

    (1) 特定值;

        给定时间点有效取值范围内的值(10 21 1-10,20,30  一月的10,20,30号21点10分执行)

    (2) *

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

        表示“每…”(*10 每十分钟)

    (3) 离散取值:

        #,#,#

    (4) 连续取值:-

        #-#

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

        /#: # 即为步长(/#10 每十分钟)

    例如:每3小时echo 命令;

        0 */3 * * * centos /bin/echo "howdy!"

时间格式  系统自定义

    @reboot Run once after reboot.

    @yearly 0 0 1 1 *

    @annually 0 0 1 1 *

    @monthly 0 0 1 * *

    @weekly 0 0 * * 0

    @daily 0 0 * * *

    @hourly 0 * * * *

系统的计划任务

    /etc/crontab

    /etc/cron.d/ 配置文件

    /etc/cron.hourly/ 脚本

    /etc/cron.daily/ 脚本

    /etc/cron.weekly/ 脚本

    /etc/cron.monthly/脚本

blob.png

                每隔一分钟执行一次目录/etc/cron.hourly里的脚本

anacron系统

    运行计算机关机时cron 不运行的任务,CentOS6.0以后版本取消anacron 服务,由crond 服务管理。

    假设计算机没有一直开机

    对笔记本电脑、台式机、工作站及其它不一直开机的系统很重要

    对偶尔要关机的服务器很有用

    配置文件:/etc/anacrontab ,负责执行/etc/cron.daily /etc/cron.weekly /etc/cron.monthly 中系统任务。/etc/cron.hourly/ 由/cron.d/0hourly 执行

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

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

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

    • 字段4:要执行的任务

管理临时文件

    rhel6.0 使用/etc/cron.daily/tmpwatch 定时清除临时文件。

    rhel7.0 使用systemd-tmpfiles-setup 服务实现

    配置文件:

        /etc/tmpfiles.d/*.conf

        /run/tmpfiles.d/*.conf

blob.png

        /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命令(/var/spool/at/目录) 重复性作业使用crontab
Create (创建) at time crontab –e
List(查看任务) at -l  crontab -l
Details(看计划任务的详细定义) at -c jobnum(作业号) N/A(配置文件、打开计划任务)
Remove(删除) at -d jobnum crontab -r
Edit(编辑创建的任务) N/A(只能改配置文件) crontab -e

    没有被重定向的输出会被邮寄给用户

    根用户能够修改其它用户的作业

        创建一个计划任务

                    crontab -e命令会打开一个vim界面,然后按照格式创建计划任务就好

blob.png

blob.png

blob.png

                 计划任务执行 touch了file文件

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

        (1) COMMAND > /dev/null

(2) COMMAND &> /dev/null

     对于cron 任务来讲,% 有特殊用途;如果在命令中要使用%,则需要转义;不过,如果把% 放置于单引号中,也可以不用转义

    sleep 命令

        sleep NUMBER[SUFFIX]…   休眠n时间再执行计划任务

            SUFFIX:

                s: 秒, 默认

                m: 分

                h: 小时

                d: 天

原创文章,作者:旧城以西,如若转载,请注明出处:http://www.178linux.com/48902

(0)
旧城以西旧城以西
上一篇 2016-10-09
下一篇 2016-10-09

相关推荐

  • puppet代码分析

    这篇博客的目的是通过分析Forge上的Puppet模块来加深一些概念的理解,同时了解一些常用用法。 今天的例子是jfryman-nginx模块,它是原puppetlabs-nginx模块的升级版本,依赖3个Puppet公共模块:puppetlabs-apt,puppetlabs-stdlib和puppetlabs-concat。安装非常方便,puppet m…

    2017-03-18
  • linux的基本命令

    先安装一个软件SecureFX8.0,作为伪终端来远程控制虚拟机 1.hostname是虚拟机连接的IP地址 下面来介绍一些linux的基本命令 1. useradd xx 创建一个用户   userdel xx 删除一个用户 不删除用户的文件   User -r xx  删除一个用户且删除该用户的…

    2017-07-14
  • N28-第二周

    1. Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。
    2. bash的工作特性之命令執行狀態返回值和命令行展開所涉及的內容及其示例演示。
    3. 請使用命令行展開功能來完成以下練習:
    (1) 創建/tmp目錄下的a_c、a_d、b_c、b_d。
    (2) 創建/tmp/mylinux目錄下的bin、boot/grub、dev、etc/rc.d/init.d、etc/sysconfig/network-scripts、lib/modules、
    lib64、proc、sbin、sys、tmp、usr/local/bin、usr/local/sbin、var/lock、var/log、var/run目錄。
    4. 如何查看文件的元數據,其信息有哪些,分別表示什麼含意?如何修改文件的時間戳信息?
    5. 如何定義一個命令的別名?如何在命令中引用另一個命令的執行結果?
    6. 顯示/var目錄下所有以L小寫開頭,以一個小寫字母結尾,且中間至少出現一位數字(可以有其它字符)的文件或目錄。
    7. 顯示/etc目錄下,以任意一個數字開頭,且以非數字結尾的文件或目錄。
    8. 顯示/etc目錄下,以非字母開頭,後面跟了一個字母以及其他任意長度任意字符的文件或目錄。
    9. 在/tmp目錄下創建以tfile開頭,後跟當前日期和時間的文件,文件名形如:tfile-2016-05-27-09-32-22。
    10. 複製/etc目錄下所有以p開頭,以非數字結尾的文件或目錄到/tmp/mytest1目錄中。
    11. 複製/etc目錄下所有以.d結尾的文件或目錄至/tmp/mytest2目錄中。
    12. 複製/etc目錄下所有以L小寫或m或n開頭,以.conf結尾的文件至/tmp/mytest3目錄中。

    Linux干货 2017-12-14
  • apache自动化脚本搭建虚拟主机

    1 基于主机名实现三个虚拟主机 (1).创建网站目录与测试文件 (2).创建虚拟主机文件(目录为/etc/httpd/conf.d/下)   (3).修改测试apache主机hosts文件(就不用DNS服务器解析,方便测试),测试httpd配置文件是否有问题,重启httpd服务   (4)修改测试主机hosts文件(就不用DNS服务器解析…

    Linux干货 2016-10-09
  • Linux文件管理类命令相关

    Linux文件管理类命令相关 1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 1)、查看文件命令: (1)ls命令: list,列出目录下的内容 语法: ls [OPTION]… [FILE]… 常用选项: -a: 显示所有文件,包括隐藏文件; -A:显示除.和..之外的所有文件; -l: –…

    Linux干货 2016-09-24
  • 二叉树的应用详解 – 数据结构

    概述: 平衡树——特点:所有结点左右子树深度差≤1 排序树——特点:所有结点“左小右大字典树——由字符串构成的二叉排序树判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重)带权树——特点:路径带权值(例如长度) 最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。 1. 二叉排序树(二叉查找树 Bina…

    Linux干货 2015-04-07