zoukankan      html  css  js  c++  java
  • Linux进程

    Linux入门之 进程

    进程介绍

      Linux系统中的几乎任何行动都会以进程的形式进行。如果你用网络浏览器查看网页,浏览器就作为进程运行。如果键入bash shell的命令行,这个shell就作为进程运行。如果你用chmod命令来更改文件权限,chmod就作为单独的进程来执行。进程是完成工作的形式,linux内核的基本职责就是为进程提供做事情的地方,不让彼此撞车。

    进程是已启动的可执进程序的运行实例,进程有以下组成部分:

    1. 已分配内存的地址空间

    2. 安全属性,包括所有权凭据个特权

    3. 程序代码的一个或多个执行进程

    4. 进程状态

    进程与程序区分
    程序:二进制文件,静态。
    进程:是程序运行的过程,动态,有生命周期及运行状态

    进程的属性:

    1. 进程ID(PID):是唯一的值,用来区分进程

    2. 父进程(PPID)

    3. 启动进程的用户ID(UID)和所归属的组(GID)

    4. 进程状态:分为运行R,休眠S,僵尸Z

    5. 进程执行的优先级

    6. 进程所连接的终端名

    7. 进程资源占用:如内存、CPU等

    进程(Process)是一个程序在其自身的虚拟地址空间中的一次执行活动。之所以要创建进程,就是为了使多个程序可以并发的执行,从而提高系统的资源利用率和吞吐量。

    程序只是一个静态的指令集合;而进程是一个程序的动态执行过程,它具有生命期,是动态的产生和消亡的。

    进程家族

      引导系统时,Linux内核的一个职责是启动第一个进程(通常是/sbin/init)。因为一个业已存在的进程继续派生,所有其他进程得以启动。

    孤儿进程

      如果说处理子进程终止后的善后事宜是父进程的职责的话,那么如果父进程在子进程之前终止该怎么办?这个子进程就变成了孤儿进程。

    僵尸进程

      当进程退出,释放大多数资源和它的父进程收集它的返回值、释放剩余资源这两段时间之间,子进程处于一个特殊状态,被称为僵尸进程(zombie)。每个进程都会经过一个短暂的僵尸状态。

    五种进程状态

    可运行(R)
          处于可运行状态的进程,一旦有机会,就会访问CPU。多个进程可以(而且经常)处于可以运行状态,但是因为在任何给定时间内只有一个进程可以在CPU上运行,所以实际上这些进程中只有一个在任何给定的实例上运行。
    
    自愿(可中断的)睡眠(s)
          从名称中可以看出,处于自愿睡眠状态的进程选择处于该状态。通常,这一进程在某事发生之前无事可做。
    
    非自愿(不可中断或强制)睡眠(D)
          内核迫使进程进入非自愿睡眠状态。该进程并没有选择休眠,它情愿运行以便做完事情。当资源被释放时,内核会唤醒进程并将设置为可运行状态。
    
    停止的(挂起的)进程(T)
          用户有时决定挂起进程,被挂起的进程在被用户重新启动前不会执行任何操作。
    
    僵尸进程(Z)
        每个快要终止的进程会经历一个短暂的僵尸状态,然而有时有些进程会一直停留在僵尸状态。
    

    静态任务管理器

    ps - report a snapshot of the current processes
    
    语法
    
    ps [options]
    
    命令选项:
    
    a: 显示跟当前终端关联的所有进程
    
    u: 基于用户的格式显示
    
    x: 显示所有进程,不以终端机来区分
    
    U: 显示某用户ID所有的进程
    
    A: 显示所有程序
    
    e: 此参数的效果和指定”A”参数相同
    
    f: 用ASCII字符显示树状结构,表达程序间的相互关系
    
    o: 自定义输出格式
    

    ps -aux 输出解释

    USER: 进程拥有者

    PID: pid

    %CPU: 占用的 CPU 使用率

    %MEM: 占用的内存使用率

    VSZ: 占用的虚拟内存大小

    RSS: 占用的内存大小

    TTY: 终端的次要装置号码 (minor device number of tty)

    STAT: 该进程的状态:

    D: 不可中断的静止

    R: 正在执行中

    S: 静止状态

    T: 暂停执行

    Z: 不存在但暂时无法消除

    W: 没有足够的内存分页可分配

    <: 高优先序的进程

    N: 低优先序的进程

    L: 有内存分页分配并锁在内存内 (即时系统或捱A I/O)

    s 表示进程是控制进程

    l 表示进程是多线程

    +表示当前进程运行在前台

    START: 进程开始时间

    TIME: 执行的时间

    COMMAND:所执行的指令

    COMMAND中带[ ]的为系统创建的进程,直接显示路径的为用户所创建的进程


    动态管理进程

    top命令

    第一行:

    当前时间    运行时间    当前登陆系统的用户数量

    load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况。

    第二行:

    Tasks: 165 total  -总进程数为165

    1 running  -正在运行的进程数

    162 sleeping  -睡眠的进程数

    2 stopped  -停止的进程数

    0 zombie  -僵尸进程数

    第三行:

    0.3 us  -系统用户进程使用CPU百分比

    0.3 sy  -内核中的进程占用CPU百分比

    0.0 ni  -用户进程空间内改变过优先级的进程占用CPU百分比

    99.3 id  -空闲的CPU百分比

    0.0 wa  -CPU等待I/O完成的时间总量

    0.0 hi  -硬中断占比

    0.0 si  -软中断占比

    0.0 st  -虚拟机占用物理的时间,例如物理机运行了KVM,则表示KVM占用物理机的CPU时间

    第四行:

    Mem: 物理内存

    1005480 total  -物理内存总量

    73036 free  -空闲内存总量

    446528 used  -使用的物理内存总量

    485916 buff/cache  -内核缓存内存量

    第五行:

    Swap: 交换内存

    2097148 total  -交换分区总量

    2097148 free  -空闲交换分区总量

    0 used  -使用的交换分区总量

    397568 cached  -可利用内存总量

    第六行:

    PID  -进程号

    USER  -进程管理用户

    PR  -进程优先级

    NI  -nice值  负值表示高优先级,正值表示低优先级

    VIRT  - -虚拟内存

    RES  -物理内存

    SHR  -共享内存

    S  -进程状态

    %CPU  -上次更新到现在的CPU时间占用百分比

    %MEM  -进程使用的物理内存百分比

    TIME+  -进程使用的CPU时间总计,单位1/100秒

    COMMAND  -进程名称

    top快捷键:

    s: 默认三秒刷新一次,按s修改刷新时间

    空格: 立即刷新

    q: 退出

    P; 按CPU排序按CPU排序

    M: 按内存排序

    T: 按时间排序

    数字1: 显示每个内核的CPU使用率

    u/U: 指定显示的用户

    h: 帮助


    进程管理

    kill命令

    kill - terminate a process
    
    语法
    
    kill[选项][进程号]
    
    选项
    
    -l 打印信号编号,若果不加信号的编号参数,则使用“-l”参数会列出全部的信号名称
    
    -a 当处理当前进程时,不限制命令名和进程号的对应关系
    
    -p 只打印相关进程的进程号,而不发送任何信号
    
    -s 指定发送信号
    

    Kill命令工作原理:

    向Linux内核发送一个系统操作信号和某个程序的进程标识号,然后系统内核就可以对进程标识号指定的进程进行操作

    信号

    HUP 1 重载配置文件

    INT 2 中断(同 Ctrl + C)

    QUIT 3 退出(同 Ctrl + )

    TERM 15 终止

    KILL 9 强制终止

    CONT 18 继续(与STOP相反, fg/bg命令)

    STOP 19 暂停(同 Ctrl + Z)

    应注意,信号使进程强行终止,这常会带来一些副作用,如数据丢失或者终端无法恢复到正常状态。发送信号时必须小心,只有在万不得已时,才用kill信号(9),因为进程不能首先捕获它。要撤销所有的后台作业,可以输入kill 0。因为有些在后台运行的命令会启动多个进程,跟踪并找到所有要杀掉的进程的PID是件很麻烦的事。这时,使用kill 0来终止所有由当前shell启动的进程,是个有效的方法。

    kill -9 强制结束

    kill -0 检测进程是否存在

    killall命令

    Linux系统中的killall命令用于杀死指定名字的进程(kill processes by name)

    命令格式:
    
    killall[选项][进程名]
    
    命令选项:
    
    -I 忽略小写
    
    -g 杀死进程组而不是进程
    
    -i 交互模式,杀死进程前先询问用户
    
    -l 列出所有的已知信号名称
    
    -q 不输出警告信息
    
    -s 发送指定的信号
    
    -v 报告信号是否成功发送
    
    -w 等待进程死亡
    
    —help 显示帮助信息
    
    —version 显示版本显示
    
    -u:杀死指定用户的进程
    
    -r:使用正规表达式匹配要杀死的进程名称
    
    -p:杀死进程所属的进程组
    

    进程优先级管理

    如何调整优先级

    nice命令

    nice - run a program with modified scheduling priority
    
    语法
    
    nice [OPTION] [COMMAND [ARG]…]
    
    选项
    
    -n add integer N to the niceness (default 10)
    
    设定一个优先级 默认为10
    
    linux porcess 优先级为-20 - 19 数字越小优先级越大
    
    调整优先级命令nice
    
    nice --19 ping -c 500 localhost -19优先级
    
    nice -19 ping -c 500 localhost 19优先级
    

    renice命令

    renice - alter priority of running processes
    
    renice -n -19 -p 16863
    
    renice -n -20 -u root
    
    0 (用户 ID) 旧优先级为 -10,新优先级为 -20
    

    普通用户只能降低程序的优先级 不能提高程序优先级,root随便


    用nice以优先级为8运行ping命令

    使用 top -b 命令查看ping目前的优先级,为8级

    使用renice更改ping的优先级

    更改成功

  • 相关阅读:
    evernote100个做笔记的好方法
    平衡二叉树的调整模版
    晨间日记的奇迹
    hdu 2952 Counting Sheep
    hdu 1535 Invitation Cards
    poj 3259 Wormholes(spfa)
    poj 2263 Heavy Cargo(floyd)
    poj 3268 Silver Cow Party(SPFA)
    hdu 1690 Bus System
    hdu 3631 Shortest Path(Floyd)
  • 原文地址:https://www.cnblogs.com/aqiao/p/11684235.html
Copyright © 2011-2022 走看看