zoukankan      html  css  js  c++  java
  • 进程管理

    概述

    进程是应用程序的一个运行实例,即运行种的程序为进程
    进程以进程发起者的身份运行
    任何时候,用户操作计算机,就是在发起进程,因此进程是用户操作计算机的代理

    进程分类:

         跟终端相关的进程:从终端启动的进程

         跟终端无关的进程:随系统一起启动的进程

    查看进程

    ps命令

    ps命令参数格式:

      1.Unix风格:参数前加破折号 

          -e      显示所有进程

          -f       显示完整格式

          -l        长格式

         -o      指定输出字段,如:ps -o pid,comm,ni 

          -H      层级化显示(树状显示:父子进程相邻),可清楚看出进程启动顺序。

      2.BSD风格:参数前不加破则号

          #ps aux

               a:所有跟终端有关的进程

               u:显示进程的发起用户

               x:显示所有跟终端无关的进程

    #ps  -elf

    F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
    4 S root 1 0 0 80 0 - 4838 poll_s Jul01 ? 00:00:00 /sbin/init

    字段解释:

    F   内核分配给进程的系统标记

    S   进程的状态

          0  睡眠

          S  休眠

          R  可运行,正等待运行

          T  停止

           Z  僵死(运行结束的进程不释放内存)

    UID  进程属主

    PID  进程ID

    PPID 进程的父进程ID

    C     进程声明周期中的CPU利用率

    PRI   进程优先级(数值越大优先级越低)

    NI   谦让度,用来参与决定优先级

    ADDR  进程的内存地址

    SZ 进程换出需要的交换空间

    WCHAN  进程休眠的内存函数的地址

    STIME  进程启动时的系统时间 

    TTY    进程启动时的终端设备,非终端设备启动的进程显示?号

    TIME  运行进程需要的累计CPU时间

    CMD  进程名

          [进程名]:进程名外加[],表示该进程为内核线程

    pstree  查看进程树

    pidof 查看进程ID

    pidof 进程名   

    top  实时查看进程

    top [option]

        -d:刷新时长

    #top

    top - 04:25:41 up 18:03, 2 users, load average: 0.00, 0.00, 0.00
    Tasks: 73 total, 1 running, 72 sleeping, 0 stopped, 0 zombie
    Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
    Mem: 502360k total, 378996k used, 123364k free, 46496k buffers
    Swap: 1015800k total, 0k used, 1015800k free, 199956k cached

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    1 root 20 0 19352 1560 1260 S 0.0 0.3 0:00.59 init

    显示内容解释:

    1.第1行

        系统当前时间、运行时间、登陆用户树

        up:系统运行时长

        load average:最近1min,5min,15min分钟的平均负载

    2.第2行

       Tashks:任务数

    3.第3行

       us:用户相关进程占用CPU百分比

       sy:系统相关进程占用CPU百分比

       ni:调整谦让度,影响CPU的比例

       id:CPU空闲百分比

       wa:等待I/O完成所占用的时间

       hi:硬件中断所占用的时间

       si:软中断所占用的时间

       st:被偷走的时间(虚拟化)

    4.第4行、第5行:系统内存使用情况

    5.第6行:

      VIRT:进程占用的虚拟内存总量

      RES:进程占用的物理内存总量

      %CPU:进程使用CPU的比例

      %MEM:进程使用的比例

     %TIME+:进程自启动到当前,使用CPU的时间总量

    交互命令:

    M 根据占用内存大小排序

    P 根据CPU使用百分比排序

    T 根据累计使用CPU时间排序

    z 切换彩色模式还是单色模式

    u 显示某个用户的进程

    q 退出top

    k 终止某个进程

    备注:默认情况,top命令按CPU利用率排序

    结束进程 

    kill -l   #查看所有可执行的信号

    kill PID     #向进程发送SIGTERM信号,终止进程(如果程序跑飞,将不能响应此信号)

    kill -9 PID   #向进程发送SIGKILL,无条件终止进程

    killall 进程名   #支持通配符

    处理信号

    进程之间通过信号来通信,常用linux进程信号如下:

    信号    名称         描述

    1        SIGHUP    挂起进程

    2        SIGINT     终止进程

    9       SIGKILL    无条件终止进程

    15    SIGTERM  可能的话终止进程

    18    SIGTSTP   暂停进程,不终止进程(下次启动时,可从上次执行的位置继续往下运行)

    19    SIGCONT  继续运行停止的进程

     产生信号

    ctrl+C:产生SIGINT信号,终止当前进程

    ctrl+Z:产生SIGTSTP信号,暂停当前进程

    #sleep 100

    ^Z      #键入Ctrl+Z命令

    [1]+ Stopped   sleep 100    #1表示作页号

     捕捉信号

    shell脚本默认忽略信号,将信号交给上层处理,可以使用trap命令捕捉信号,在本地处理。

    trap commands signals

     捕捉普通信号

    示例:检测到SIGINT或SIGTERM信号时不终止进程,而是打印一行信息

    #cat trapsig.sh
    #!/bin/bash
    trap "echo 'Sorry I have traped Ctrl-C" SIGINT SIGTERM
    echo "This is a test program"
    sleep 100
    #./trapsig.sh
    This is a test program
    ^C    #输出Ctrl+C命令,产生一个SIGINT信号,结果打印如下,而不是终止进程
    Sorry I have traped Ctrl-C
    

     捕捉脚本退出信号  trap  command EXIT

    示例:捕捉脚本退出(EXIT),打印byebye

    # cat test1
    #!/bin/bash
    trap "echo byebye" EXIT
    echo This is a test program
    count=1
    while [ $count -le 5 ]
    do
      echo "Loop #$count"
      sleep 2
      count=$[ $count + 1 ]
    done
    # ./test1
    This is a test program
    Loop #1
    Loop #2
    Loop #3
    Loop #4
    Loop #5
    byebye 
    

     移除捕捉 trap -

    cat test1
    #!/bin/bash
    trap "echo byebye" EXIT
    echo This is a test program
    count=1
    while [ $count -le 5 ]
    do
      echo "Loop #$count"
      sleep 2
      count=$[ $count + 1 ]
    done
    trap - EXIT
    echo "I just removed the trap"
    # ./test1
    This is a test program
    Loop #1
    Loop #2
    Loop #3
    Loop #4
    Loop #5
    I just removed the trap

    后台模式运行脚本

    &

    后台运行不影响前台操作,但仍然会使用显示器来显示STDOUT和STDERR信息

    #[root@localhost home]#unt=1
    while [ $count -le 5 ]
    do
        sleep 2
        echo "Loop: $count"
        count=$[ $count + 1 ]
    done
    [root@localhost home]#./test.sh & [1] 5463 #1表示作业号,5463表示进程号

      [root@localhost home]# Loop: 1
    Loop: 2
    Loop: 3
    Loop: 4
    Loop: 5

    [1]+ Done ./test.sh   #Done表示执行完成

    非控制台方式运行脚本 nohup

    默认情况下,每个后台终端进程都绑定了在绑定在某个终端中,如:pts/0,如果终端被关闭了,则后台进程也会退出

    nohup命令会阻止所有发给该进程的SIGHUP信号,保证终端退出,后台进程不结束

    nohup会把脚本输出结果,追加至当前目录下nohup.out文件中

    1.运行上例的脚本

    #nohup ./test1.sh &

    2,退出并重登终端,待脚本运行结束后,查看nohup.out文件

    #cat nohup.out

    Loop: 1
    Loop: 2
    Loop: 3
    Loop: 4
    Loop: 5

     作业控制

    linux将shell中运行的每个进程称为作业,并为每个作业分配一个唯一的作业号

    1.查看作业

    jobs 

      -l  列出进程ID及作业号

     -p  只列出作业的pid

     -r  只列出运行中的作业

     -s 只列出已停止的作业

     -n 只列出上次shell发出的通知后改变了状态的作业

    #cat test.sh

    sleep 100

    #./test.sh

    ^Z    #ctrl+Z命令

    [1]+  Stopped                 ./test.sh

    #./test.sh

    ^Z  #ctrl+z命令

    [2]+  Stopped                 ./test.sh

    #./test.sh &

    [3] 15631

    #jobs -l

    [1]- 15627 Stopped ./test.sh
    [2]+ 15629 Stopped ./test.sh
    [3] 15631  Running ./test.sh &

    字段解释:

    作业号

    + 表示默认作业,使用控制命令时,不指定作业号,默认操作此作业

    - 当前默认作业完成时,带-号的作业会成为下一个默认作业

    进程号:

    作业状态:

          Stopped   #暂停的作业

          Running   #运行中

          Done   #作业变成Done,下次jobs查看将不存在

    进程名:

    2.重启作业

    重启暂停的作业,从上次暂停的位置继续运行。

    #bg [作业号]   #后台方式重启作业

    #fg  [作业号]   #前台方式重启作业

    2.终止作业

    kill %作业号

    调整谦让度

     同一时间,只有一个进程可以使用CPU,内核通过将CPU时间轮流分配给每个进程,实现多进程同时运行。

    调度优先级是内核分配给进程的CPU时间总量,默认每个进程的调度优先级都相同,等于0

    设置范围:-20~20,越小表示优先级越高,可使用CPU时间越多。

    #nice -n -10 ./test1.sh   #调整调度优先级=-10

    #renice -n 5 -p 6030  #修改进程号6030的调度优先级为5

    备注:

        普通用户只能使用renice调整自己的进程的优先级,并且自能降低优先级

        root用户可以调整进程优先级到任何值

    定时运行作业 at   

    一次性

    at命令会将作业提交到队列,指定shell何时运行该作业

    at的守护进程atq会以后台模式运行,默认每60s检查/var/spool/at目录来获取提交的作业

    at [-f filename]  time

       -q     #指定作业队列优先级,a的优先级最高

    time:  

      at now +5 minutes  #5分钟后执行

      at now +5 hour    #5小时后

      at now +5 days  #5天后

      at now +5 weeks #5周后

      at 10:31am  #上午10:31
      at 10:31pm  #下午10:31
      at  10:31  2017-01-01  #2017-01-01 10:31

    示例: 

    #at  +5 minutes

    >pwd

    >  Ctrl+D    #ctrl+D结束命令输入

    job 7 at 2017-07-02 08:46
    # atq   #查看at任务
    7 2017-07-02 08:46 a root

    查看作业执行结果:/var/spool/mail邮箱

    删除任务

    #atrm 任务号

    周期性任务 cron

    前提:安装vixie-crom和crontabs软件包

    服务名:crond

    #crontab -e     #编辑任务

    任务格式: 分 时 日 月 周 命令 

    15 10 * * 6  pwd     #每周六的10:15分,执行pwd命令

    15 10 * * * if [`date +%d -d tomorror` = 01 ]; then; /root/test.sh > stdout.file    #每月最后1天执行此脚本

    15 10 * * 1~5  date  #周一至周五10:15分运行date命令

    #crontab  -l   #查看任务

    #cromtab -r  #删除所有任务

    作业执行结果:在用户邮箱中,/var/spool/mail

    周期性运行目录:

    /etc/crom.hourly:此目录下的脚本,每小时运行一次

    /etc/cron.daily :此目录下的脚本,每天运行一次

    /etc/cron.weekly:此目录下的脚本,每周运行一次

    /etc/cron.monthly:此目录下的脚本,每月运行一次

    查看系统状态 vmstat

    vmstat 3 10   #每个3s,显示10次

    # vmstat
    procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
    r b swpd free buff cache si so bi bo in cs us sy id wa st
    0 0 0 12396 53788 283372 0 0 3 4 17 32 0 0 99 1 0

    解释:

    procs:进程相关

      r:运行队列长度

      b:阻塞队列长度

    memory:内存相关

      swpd:已使用的交换内存大小

       free:空闲内存

      buff:缓冲空间大小

      cache:缓存空间大小

    swap:交换分区相关

      si:多少页面从物理内存换出

      so:多少页面换入物理内存

    io:I/O相关

      bi:多少磁盘块被调入到物理内存

      bo:多少磁盘块从内存中同步到磁盘

    system:内核空间相关

      in:interrupt终端的个数

      cs:进程切换的次数

    cpu:CPU利用率

      us:用户进程占用的CPU利用率

      sy:系统进程占用的CPU利用率

      id:cpu空闲利用率

      wa:等待I/O完成所占用的时间

      st:被偷走的时间

    111
  • 相关阅读:
    Building a Space Station POJ
    Networking POJ
    POJ 1251 Jungle Roads
    CodeForces
    CodeForces
    kuangbin专题 专题一 简单搜索 POJ 1426 Find The Multiple
    The Preliminary Contest for ICPC Asia Shenyang 2019 F. Honk's pool
    The Preliminary Contest for ICPC Asia Shenyang 2019 H. Texas hold'em Poker
    The Preliminary Contest for ICPC Asia Xuzhou 2019 E. XKC's basketball team
    robotparser (File Formats) – Python 中文开发手册
  • 原文地址:https://www.cnblogs.com/zmdsg/p/7106099.html
Copyright © 2011-2022 走看看