linux进程管理

进程:process, 过程

MMU: Memory Management Unit
    内存保护
    虚拟化:
        CPU 32bit: 2^32=4GB   32位中linux1G内核(在高位空间即是cache空间)3G进程win为半儿分
            线性地址空间

        物理地址空间:RAM+ROM


进程:init(1) --> fork() �C>    init为首个进程使用fork系统调用来生成进程  除init均有父进程

进程间通信:IPC, Inter Process Communication
    signal, shm, semerphor


进程分为两类:
    CPU-Bound: CPU密集型进程
    IO-Bound:IO密集型进程

进程分为三类:
    批处理进程
    实时进程
    交互式进程

调度器:
    进程优先级:
        动态优先级:
            惩罚措施:
        静态优先级:用户类进程
            100-139:数字越小,优先级越高;
            nice值:-20, 19
                   100, 139 nice值对应的优先级 
        实时优先级:内核类线程
            1-99:数字越大,优先级越高;

Linux 2.6: O(1)

进程切换:Context Switch, 上下文切换

内核模式,用户模式

内核空间,用户空间
   
    ring0: 特权指令,敏感指令

    ring3:普通指令 --> 系统调用

IO:
    poll: 轮询, 忙等待;
    interupt: 中断, 中断的上半部和下半部
    DMA:

进程的状态:
    Ready:
    Running:
    Sleeping
        Interruptable Sleeping
        Uninterruptable Sleeping
    Stopped:   停止态非退出   需要人为叫醒
    Zombie: 僵死态    此态过多即为内存泄漏

    COW: Copy On Write: 写时复制;  子进程复制给父进程

多线程任务 即一个进程内分多个线程 以利于多核运算


进程管理类的命令:
    pstree, ps, top, vmstat, htop, pmap

    pstree: 查看进程树;

    ps: 显示系统向前进程状态的命令;
        进程:
            跟终端相关的进程     默认 tty查看当前终端
            跟终端无关的进程

            a: 所有跟终端相关的进程
            x: 所有跟终端无关的进程
                STAT:
                    S:可中断睡眠
                    D:不可中断睡眠
                    R:运行或可运行;
                    T:停止
                    Z:僵死
                    s: session leader
                    l: 多线程进程;
                    +: 前台进程;
                    N: 低优先级进程;
                    <: 高优先级进程;
            u: 以用户为中心显示进程相关信息
                %CPU: cputime/realtime
                %MEM:
                VSZ: Virtual memory SiZe
                RSS: 常驻内存集;

            -ef:   PSR运行在哪颗CPU上
                -e: 显示所有进程;
                -f: 完整格式列表;
            -eFH
                -F:显示额外信息;
                -H: 显示进程层次关系;

            -o 要显示的字段: 自定义显示格式
                ps axo pid,command

        pgrep pattern: 根据特定条件 如只显示某用户的进程
            例如:pgrep bash
            选项:
            -U USERNAME:显示相关用户的进程;
            -G GROUPNAME:相关组的进程;

        pidof: 查某程序进程号

    top:
        M: 按内存空间占用大小排序;
        P:按CPU时间占用大小排序;
        T:按累计时间排序;

        k: 杀死一个进程;
        m: 是否显示内存摘要信息;
        t: 是否显示CPU和进程的统计信息;
        l: 是否显示负载信息

        q: 退出

        选项:
            -d #: 刷新延迟;
            -b : 批次显示;
            -n #: 指定批次显示时显示的批数;

    htop:

    ps、pstree、pidof、pgrep、top、htop

    vmstat
        procs
            r: 运行或等待CPU时间片的进程的个数;
            b: 被阻塞(通常为等待IO完成)的进程队列的长度;
        memory
            swpd: 从物理内存交换至交换分区的数据量;
            free: 未使用的物理内存空间;
            buff: buffer cache的空间大小;元数据;通常是缓存写操作相关的数据;
            cache: page cache的空间大小;数据;通常是缓存读操作的相关数据;
        swap: si so 过大 物理内存不够用/有占大内存的程序
            si: swap in, 数据进入交换分区数据量,即从内存至交换分区中去;(kb/s)   
            so: swap out, 数据离开交换分区数据量,即从交换分区至内存;
        io:     bi bo io可能成为系统瓶颈
            bi: block in,从块设备读入的数据量, (kb/s)
            bo: block out,保存至块设备的数据量, (kb/s)
        system:  in cs 过大为内核消耗CPU过甚
            in: interrupt,中断发生的速率,通常意为每秒多个次中断请求发生;
            cs: context switch, 上下文切换的速率; 切换过多数千上万则正在运行进程过多
        cpu:
            us: 用户进程所占用CPU时间的百分比;
            sy: 内核
            id: CPU空闲百分比;
            wa: CPU用于等待IO完成的时间百分比;
            st: 被虚拟化占去的时间百分比;

    sar �Cu   

    sar -P ALL

    iostat -c

    dstat -c
    dstat -C 0,3

进程间通信:IPC
    共享内存,shm
    信号:signal

    信号:
        1:SIGHUP, 让进程不用终止,而重读其配置文件;
        2: SIGINT, 中断正在运行的进程, 相当于Ctrl+c;
        9:SIGKILL, 直接杀死;
        15: SIGTERM, 终止;   待进程完成当前正在操作的文件后终止
        19: SIGSTOP, 停止;  送入后台可由18唤醒
        18:SIGCONT 继续

    向其它进程传递信号,使用kill  三种方式  kill -INT 进程号 /kill �C2 进程号 /kill �CSIGINT 进程号

        kill -信号 PID

        killall -信号 进程名

        killall5   所有进程

        kill �Cl   显示支持的所有信号

调整进程nice值:
    普通用户:只能调大数字,调低优先级;管理员可以随意调整
        -20, 19
        100, 139

ps axo pid,command,nice  显示nice值

    nice -n # COMMAND 使命令工作在指定nice值下  默认nice为0即120优先级
    renice # PID   调整一个已经处于运行状态的进程的nice值

Linux作业控制:
    前台:占用着终端;前台作业
    后台:无须占用终端;

查看后台作业 :jobs   

前台-->后台:Ctrl+z
    后台-->前台:fg %JOB_ID

    bg [[%]JOB_ID]:让其在后台运行;

    启动时,让作业直接运行于后台:
        # COMMAND &
        # nohup COMMAND & 退出终端后继续进行

    作业也可被终止:
        kill [%JOB_ID]

    axel -n 5 -o ./ http://a.b.c.d/abc.iso           axel下载工具

    screen:   一终端多屏  Ctrl+A  D返回之前屏
        screen
        screen �Cls  显示打开的屏
        screen -r SCREEN_ID    重新登录后恢复之前屏操作
        exit

Linux终端:
    控制台:/dev/console
    物理终端:
    虚拟终端:/dev/tty[1-6]
    模拟终端: /dev/pts/#
    串行终端: /dev/ttyS#

/proc:内核映射,伪文件系统;
    PID
    # cat /proc/PID/maps  cmdline 文件夹是启动进程的命令 mem无法查看 maps 进程所依赖的库文件在物理内存的哪一段地址空间(空间可不连续)
    # pmap PID: 查看进程运行的物理地址空间映射;

多处理器:查看cpu运行状态
mpstat

你可能感兴趣的:(linux,process,memory,空间)