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

    程序和进程


    程序


    保存在磁盘中的可执行文件
    是静态保存的代码



    进程


    在CPU及内存中运行的程序指令
    是动态执行的代码 父/子进程:进程可以创建一个或多个子进程

    进程的分类:
       

      跟终端相关的进程
        跟终端无关的进程

    进程的状态:

    1、Stopped
    2、Ready
    3、Executing
    4、Uninterruptible
    5、Interruptible
    6、Zombie:正常运行了,也结束,但是内存空间无法释放
    
    Uninterruptible sleep: 不可中断的睡眠
    Interruptible sleep:可中断睡眠:

    进程是由父子关系的,而且有优先级的

    进程的优先级:数值越小,优先级越高

    100-139:用户可控制
    0-99:内核调整的

    在计算机的程序设计上,衡量一个程序或算法,面对不同程度的队列时,它的性能如何取决于大O标准

      O(1):无论队列是多少,无论x取值多大,y值都是一样;一般而言,不可能有负值
        O(n):所需要的时间长度,随着队列的成长,而线性生长
        O(logn)
        O(n^2)
        O(2^n)

    一个进程的优先级越高,将意味着:

    1、获得更多的CPU运行时间
    2、更优先获得CPU运行的机会



    每一个进程都有一个nice值,范围在-20~19,

    分别对应于进程优先级的100~139
    默认情况下,每个进程的nice值为0
    普通用户进程能够调大自己的进程的Nice值



    调整nice值:

    调整已经启动的进程的nice值:
    renice NI PID



    在启动时指定nice值:

    nice -n NI COMMAND

    调度优先级

    1.调度优先级决定如何访问CPU
    2.优先级被nice值影响
    3.nice值的范围:-20--19,默认为0;数值越小,优先级越高


    改变调度优先级

    1.当开始一个进程前:nice -n 5 command
    2.开始进程后:renice 5 PID

    只有root才能减少nice值

    在/proc目录下,每一个进程都有一个与进程号码对应的目录,
    这个目录保存了进程的所有相关属性信息


    每一个进程的号码都是唯一

    init: 进程号为1

    交互式进程管理工具
    命令行:top
    图形:gnome-system-monitor

    ps查看进程

    ps    显示某一时刻进程状态信息,静态,以PID排序

    ps:Processes Snapshot

    默认显示终端的进程

    语法:

     ps   [选项]

    常用命令选项

      a:显示当前终端下的所有进程
        u:使用以用户为主的格式输出信息
        x:显示当前用户在所有终端下的进程
        -e:显示系统内所有的进程
        -l:使用长格式输出信息
        -f:以最完整的的格式输出信息

    例子:

    ps aux    列出正在运行的所有进程

    PID:进程ID
    %CPU:CPU使用率 
    %MEM:内存使用率
    VSZ:程序在运行时要用到的虚拟内存
    RSS:真实内存的大小
    TTY:如果出现?,则说明此进程不属于任何终端,是在进入终端前就已经运行的进程
    STAT:S表示睡眠
    START
    TIME:持续的时间
    COMMAND:由哪个指令产生的进程

    常见的STAT状态指示

        R:正在运行或就绪
        S:处于休眠状态,在需要时可唤醒
        D:不可中断的休眠,通常为等待I/O的情况
        T:停止状态,被挂起或跟踪的情况
        Z:僵尸状态,进程已终止但内存无法释放

    ps -elf操作

    以长格式显示系统中所有的进程信息
    PPID:父进程的PID号
    PRI/NI:进程优先级,数值越小优先级越高
     F:权限标记,4对应root、1表示仅复制无执行权限

    ps的风格分为:

    SysV风格:-
    BSD风格

    BSD风格:

      a: 所有与终端有关的进程 
        u:显示进程是由哪个用户启动的
        x: 所有与终端无关的进程

    BSD风格中:
      

     <:高优先级进程
        N: 低优先级进程
        +:前台进程组中的进程
        l: 多线程进程
        s: 会话进程首进程

    SySV风格

        -elF
        -ef
        -eF
    ps -o PROPERTY1,PROPERTY2   //显示指定的属性/字段

    ps -o pid,comm,ni


    top动态查看进程 

    top交互式工具

    格式:top [-d 刷新秒数] [-U 用户名]
    #top -d 5                 //每5秒刷新一次

    top交互操作的按键指令:

      ?:查看帮助(列出可用的按键指令)
        P、M:根据 %CPU、%MEM 降序排列
        T:根据进程消耗的 TIME 降序排列
        k、r:杀死指定的进程、重设进程优先级
        q:退出 top 程序

    top:

      M: 根据驻留内存大小进行降序排列
        P:根据CPU使用百分比进行降序排列
        T: 根据累计时间进行排序
        ?:查看帮助(列出可用的按键指令)
        l: 是否显示平均负载和启动时间
        t: 是否显示进程和CPU状态相关信息
        m: 是否显示内存相关信息
        
        c: 是否显示完整的命令行信息
        q: 退出top
        k: 终止某个进程
        r:重设进程优先级

    top:

    -d: 指定延迟时长,单位是秒
        -b: 批模式   //一屏一屏的显示
        -n #:在批模式下,共显示多少批   //显示的屏数

    pgrep  检索进程信息-根据特定条件

     语法:

    格式pgrep  [选项]   查询条件

    选项:

      -l    PID连同进程名一起输出
        -U    检索指定用户的进程
        -t    检索指定终端的进程    

    例子:

        
    2、查询名称含“log”的进程信息
    #pgrep -l “log”
    
    
    
    
    2、列出用户zhangsan在tty1终端开启的进程
    #pgrep -l -U zhangsan -t tty1

    pstree 树状结构

    语法:

    格式:pstree  [选项]  [PID或用户名]

    选项:

      -a    显示完整命令行
        -u    列出各进程所属的用户名
        -p    列出对应的PID号

    例子:

    查看从init开始的整个进程树
    -显示用户名、PID、完整命令行
    #pstree -aup
    
    
    
    4、查看指定PID的进程树
    #pstree 17928
    
    
    2、查看指定用户的进程树
    #pstree -p zengye

    pidof: 根据程序名称,查找其相关进程的ID号;

    进程的前后台调度

     

    前台启动

    输入正常的命令行
    运行期间占用当前终端

    后台启动

    在命令行末尾添加“&”符号
    运行期间不占用当前终端

    前台作业:占据了命令提示符
    后台作业:启动之后,释放命令提示符,后续的操作在后台完成

    前台-->后台:

      Ctrl+z: 把正在前台的作业送往后台
        COMMAND &:让命令在后台执行
        

    bg:让后台的停止作业继续运行

      bg 编号    让程序在后台运行
        bg [[%]JOBID]   

    jobs: 查看后台的所有作业

    作业号,不同于进程号
            +:命令将默认操作的作业
            -:命令将第二个默认操作的作业

    fg: 将后台的作业调回前台

    fg 编号    把后台进程调到前台
        fg [[%]JOBID]    //百分号是默认的,

    总结:

        &    放入后台运行,运行在内存中的进程
            ctrl +z    将当前的作业放入后台并暂停运行
            jobs    查看后台进程列表
            fg 编号    把后台进程调到前台
            bg 编号    让程序在后台运行

    其他:

    %number:使用作业号引用后台作业
    %string:使用给定的字符串作为命令行起始字符串引用作业
    &?string:引用命令行含有给定字符串的作业
    %%:引用当前作业
    %+:等价于%%,表示当前作业
    %-:引用前一个作业

    终止进程

    进程间通信(IPC: Inter Process Communication)

    方法:

      共享内存
        信号: Signal
        Semaphore:发出信号,打旗语

    重要的信号:

    1:SIGHUP: 让一个进程不用重启,就可以重读其配置文件,并让新的配置信息生效;
    2: SIGINT:Ctrl+c: 中断一个进程
    9: SIGKILL:杀死一个进程
    15: SIGTERM:终止一个进程, 默认信号

    Kill -l:显示所有的信号
    kill通常向另一个进程发信号

    指定一个信号:

      信号号码:kill -1
        信号名称:kill -SIGKILL
        信号名称简写:kill -KILL    //省略SIG

    信号:

    Signals--信号
    Signal 15,TERM:正常地结束某个程序,默认
    Signal 9, KILL:强制结束,立即终止
    Signal 1, HUP:重读配置文件
    man 7 signa

    发送信号到进程

    1.通过PID:kill [signal] pid ...#如果不加任何signal,默认15
    2.通过名字:killall [signal] comm ...
    3.通过pattern:pkill [-signal] pattern  #pattern等同于PID和name

    终止进程

    kill PID
    killall COMMAND(进程名)
    killall跟k指定信号的方法一样

    kill %JOBID: 终止某作业

    pkill命令

    杀死符合指定条件的进程
    用法与pgrep类似

    总结:

        
        ctrl +c 终止当前正在运行的进程 kill -9 [PID] 强制杀掉单个进程 killall 进程名 //杀死该进程名下的所有进程 pkill 进程名 //杀死该进程名下的所有进程

  • 相关阅读:
    mysql 数据库 II(数据类型)
    mysql 数据库 I
    网络协议
    Python 类IV(类成员,异常处理等)
    Python 类III(三大特性,约束,super)
    Python 类II
    类加载机制
    Java新篇章之集合
    Java 类类型之 String 类型
    java 多态
  • 原文地址:https://www.cnblogs.com/zhongguiyao/p/9178573.html
Copyright © 2011-2022 走看看