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的优先级

    更改成功

  • 相关阅读:
    *关于如何获取指定表的指定字段的数据类型的方法
    *检查表是否存在
    *用Sql添加删除字段,判断字段是否存在的方法
    *MSSQL三个关键系统表
    *系统表的应用
    VC++ ADO编程入门简介
    int i=0; i=i++ System.out.Println(i)
    Microsoft Visual C++ 6.0 关联源代码
    VC ADO接口详解
    程序员每年该做的事
  • 原文地址:https://www.cnblogs.com/aqiao/p/11684235.html
Copyright © 2011-2022 走看看