Linux进程管理

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

    Process:运行中的程序的一个副本;
        存在生命周期

    Linux内核存储进程信息的固定格式:task struct
        多个任务的task struct组建的链表:task list

    init:初始化进程 负责用户空间所有进程的创建
    进程创建:
        init
            父子关系
            进程:都是由其父进程创建
                fork(),clone()

        进程优先级:
            0-139:
                1-99:实时优先级:数字越大,优先级越高
                100-139:静态优先级:数字越小,优先级越高;

                Nice值:
                    -20,19

            Big 0
                O(1),O(logn),O(n),O(n^2),O(2^n)

        进程内存:
            Page Frame:页框,用存储页面数据
                存储Page
                MMU:Memory Management Unit 内存管理单元

        IPC:Inter Process Communication 进程间通信
            同一主机上:
                signal
                shm:shared memory
                semerphor    信号

            不同主机上:
                rpc:remote procecure call 远程过程调用
                socket:                      基于套接字通信

    Linux内核:抢占式多任务
        进程类型:
            守护进程:在系统引导过程中启动的进程,跟终端无关的进程;
            前台进程:跟终端相关,通过终端启动的进程
            注意:也可把在前台启动的进程送往后台,以守护模式运行;

        进程状态:
            运行态:running
            就绪态:ready
            睡眠态:
                可中断:interruptable
                不可中断:uninterruptable
            一次I/O分两段时间:数据等待从磁盘到内核内存中,将内核内存数据复制到进程内存中
            停止态:暂停于内存中,但不会被调度,除非手动启动之:stopped
            僵死态:zombie

        进程的分类:
            CPU-Bound
            IO-Bound

    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 process

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

            ps [OPTION] ...
                选项:支持两种风格

                常用组合:aux
                    u:以用户为中心组织进程状态信息显示
                    a:与终端相关的进程;
                    x:与终端无关的进程;

                ps aux 输出结果
                    USER: 程序是以哪个用户名的名义运行。
                    PID: 进程号,PID号范围为 1-32768, 至最高值, 则循环
                    %CPU: 进程的 CPU 使用率
                    %MEM: 进程的 MEM 使用率
                    VSZ(Virtual memory SiZe): 进程所使用的虚拟内存大小 (Virtual Size)
                    RSS(ReSident Size): 进程使用的驻留集大小或实际内存的大小(Kbytes)
                    TTY: 进程在哪个 TTY 执行的
                    STAT: 进程的状态
                        R:running
                        S:interruptable sleeping
                        D:uninterruptable sleeping
                        T:stopped
                        Z:zombie

                        +:前台进程
                        l:多线程进程
                        N:低优先级进程
                        <:高优先级进程
                        s:session leader 会话创建者(通常是bash shell 进程)
                    START: 进程启动时间及日期
                    TIME: 进程使用的总CPU时间
                    COMMAND: 正在执行的命令及参数

            常用组合:-ef
                -e:显示所有进程
                -f:显示完整格式程序信息

            常用组合:-eFH
                -F:显示完整格式程序信息
                -H:以进程层级格式显示进程相关信息

            常用组合:-eo,-axo
                -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
                -axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

                    ni:nice值
                    pri:priority,优先级
                    psr:processor,CPU
                    rtprio:实时优先级

        pgrep,pkill:
            pgrep [options] pattern
               pkill [options] pattern

                   -u uid:effective user
                   -U uid:real user
                   -t terimnal:与指定终端相关的进程
                   -l:显示进程名
                   -a:显示完整格式的进程名
                   -P pid:显示其父进程为此处指定的进程的进程列表

            pidof:    
                根据进程名获取其PID

            top:
                有许多内置命令:
                    排序:
                        P:以占据的CPU百分比;
                        M:占据内存百分比;
                        T:累计占据CPU时长;
                    首部信息显示:
                        uptime信息:l命令
                        tasks及cpu信息:t命令
                            cpu分别显示:1(数字)
                        memory信息:m命令

                    修改刷新时间间隔:s
                    终止指定进程:k

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

            htop命令:使用epel源下载
                s:跟踪选定进程的系统调用;
                l:显示选定进程打开的文件列表;
                [:将选定的进程绑定至某指定CPU核心;

            vmstat命令
                vmstat [options] [delay [count]]

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

            pmap命令
                pmap - report memory map of a process
                    pmap [options] pid [...]
                      -x:显示详细格式的信息

                    另一种实现:
                        #cat /proc/PID/maps

            glance:使用epel源下载
                
                常用选项:
                    -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:versatile tool for generating system resource statistics
                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相关统计数据

                    --tcp
                    --udp
                    --unix
                    --raw
                    --socket

                    --ipc

                    --top-cpu:显示最占cpu进程
                    --top-io:显示最占io进程
                    --top-mem:显示最占内存进程
                    --top-lantency:显示延迟最大的进程

            kill命令:

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

                显示当前系统可用信号:
                    #kill -l
                    #man 7 signal

                常用信号:
                    1)SIGHUP:无须关闭进程而让其重读配置文件;
                    2)SIGINT:中止正在运行的进程,相当于Ctrl+c;
                    9)SIGKILL:杀死正在运行的进程;
                    15)SIGTERM:终止正在运行的进程;

                指定信号的方法:
                    (1)信号的数字标识:1,2,9
                    (2)信号完整名称:SIGHUP
                    (3)信号的简写名称:HUP

            向进程发信号:
                kill [-SIGNAL]  PID ...

            终止“名称”之下的所有进程:
                killall [ -SIGNAL] Program

            Linux的作业控制
                前台作业:通过终端启动,且启动后一直占据终端
                后台作业:可以通过启动,但启动后即转入后台运行(释放终端)

                如何让作业运行于后台?
                    (1)运行中的作业
                     ctrl+z
                    (2)尚未启动
                        # COMMAND &

                    此类作业虽然被送往后台运行,但其依然与终端相关,即登出后进程就关闭了,如果希望送往后台后,剥离与终端的关系,即退出后进程仍在后台运行。
                        #nohup COMMAND &

                作业控制:
                    #fg [[%]job_num] :把指定的后台作业调回前台
                    #bg [[%]job_num] :让送往后台的作业在后台继续运行
                    #kill [[%]job_num] :终止指定的作业

    进程优先级调整:
        静态优先级:100-139

        进程默认启动时的nice为0,优先级为120;

        nice命令:
            nice [OPTION] [COMMAND [ARG]...]

        renice:
            renice [-n] priority

        查看进程nice值:
            ps axo pid,comm,ni

Linux任务计划、周期性任务执行
    未来的某时间点执行一次任务:at,batch
    周期性运行某任务:cron

    电子邮件服务:
        smtp:simple mail transmission protocol,用于传送邮件;
        pop3:Post Office Protocol
        imap4:Internet Mail Access Protocol

        mailx - send and receive Inter mail

            MUA: Mail User Agent

            mailx [-s 'SUBJECT'标题] username[@hostname]
                邮件正文的生成:
                    (1)直接给出,ctrl+d;
                    (2)输入重定向:
                    (3)通过管道:
                        echo -e "How are you" | mail

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

    周期性任务计划cron:
        确保crond守护处于运行状态:
            CetnOS 7:
                systemctl status crond
            CentOS 6:
                service crond status

        计划要周期性执行的任务提交给crond,由其来实现到点运行
            系统cron任务:系统维护作业
                /etc/crontab
            用户cron任务:
                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

                例如:晚上9.10运行echo命令:
                    10 21 * * * /bin/echo "Hello!"

                时间表示法:
                    (1) 特定值:
                        给定时间点有效取值范围内的值;
                    (2) *
                        给定时间点上有效取值范围内的所有值;
                        表示“每...”
                    (3) 离散取值: ,
                        #,#,#,
                    (4) 连续取值:-
                        #-#
                    (5) 在指定时间范围上,定义步长;
                        /#:#即为步长

                例如:每3小时echo命令:
                    1 */3 * * * /bin/echo "howdy!"

            用户cron:
                crontab命令定义:每个用户都有专用的cron任务文件:/var/spool/cron/USERNAME

                crontab命令:
                    crontab [-u user] [-l | -r | -e] [-i] [-s]
                        -l: 列出所有任务;
                        -e: 编辑任务;
                        -r: 移除所有任务;
                        -i: 同-r一同使用,以交互模式让用户有选择地移除指定任务;

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

                注意:运行结果以邮件通知给相关用户;
                    (1)COMMAND > /dev/null
                    (2)COMMAND &> /dev/null

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

                思考:
                    (1)如何在秒级别运行任务?
                        * * * * * for min in 0 1 2;do echo "hi";sleep 20;done
                    (2)如何实现每7分钟运行一次任务?
                        */7 * * * * /bin/echo "HEllO!"

                    sleep命令:
                        sleep NUMBER[SUFFIX]...

                            SUFFIX(后缀):
                                s:秒
                                m:分
                                h:小时
                                d:天

            练习:
                1、每4小时备份一次/etc目录至/backup目录中,保存的文件名称格式为"etc-YY-MM-DD-HH.tar.xz"
                #crontab -e
                0 */4 * * * /bin/tar -JcPf /backup/etc-`date +%Y-%m-%d-%H-%M`.tar.xz /etc/

                2、每周二、四、日备份/var/log/messages文件至/logs目录中,文件名形如"messages-yymmdd"
                
                0 0 * * 2,4,7 /bin/tar -JcPf /logs/messages-`date +\%Y\%m\%d` /var/log/messages

                3、每两小时取出当前系统/proc/meminfo文件中以S或M开头的信息追加至/tmp/meminfo.txt文件中;

                0 */2 * * * /bin/grep ^[S,M] /proc/meminfo >> /tmp/meminfo.txt

                4、工作日时间内,每小时执行一次"ip addr show"命令;

                0 9-18/1 * * 1-5 /bin/echo `ip addr show`

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值