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

    进程是什么?
      程序
        保存在硬盘、光盘等介质中的可执行代码和数据
        是静态保存的代码
      进程
        在CPU及内存中运行的动态执行的程序代码
        进程是程序运行的实例
      同一个程序可能对应多个进程
     
     
    子进程和父进程
      INIT进程是系统中第一个进程,PID永远为1
     
    进程相关操作
      ps命令
        用途:查看静态的进程统计信息
        格式: ps aux
      ps -elf
        常用命令选项
        ax:显示所有进程信息
        u:使用以用户为主的格式输出进程信息
        -e:显示系统内的所有进程信息
        -l:使用长格式显示进程信息
        -f:使用完整的格式显示进程信息
     
      ps aux:
        ·USER 进程的用户;
        ·PID 进程的ID;
        ·%CPU 进程占用的CPU百分比;
        ·%MEM 占用内存的百分比;
        ·VSZ 该进程使用的虚拟内存量(KB);
        ·RSS 该进程占用的物理内存量(KB);
        ·TTY 该进程在那个终端上运行(登陆者的终端位置),若与终端无关,则显示“?”,若为pts/0等,则表示由网络连接主机进程;
        ·STAT 进程状态;
        ·START 该进程启动时间;
        ·TIME 该进程实际使用CPU运行的时间;
        ·COMMAND 命令的名称和参数。
     
     
      ps -elf:
        ·F 进程的flag,  4 代表使用者为 super user
        ·S 进程状态
        ·UID 进程的用户;
        ·PID   进程的ID;
        ·PPID 父进程的ID
        ·C   CPU利用率,以整数表示
        ·PRI  Priority的缩写
        ·NI     Nice的缩
        ·PRI/NI 代表此进程被 CPU 所执行的优先顺序,数值越小代表该进程越快被 CPU 执行。
        ·ADDR     指出该进程内存的地址,如果是 running的程序,一般就是 "-"
        ·SZ     占用内存大小;
        ·WCHAN 是否正在运作当中,若为 - 表示正在运作
        ·STIME 进程的启动时间
        ·TTY 该进程在哪个终端上运行(登陆者的终端位置)
        ·TIME      该进程实际使用CPU运行的时间;
        ·CMD   命令的名称和参数;
     
     
      top命令
        用途:查看动态的进程排名信息
    [root@localhost ~]# top
    top - 06:08:48 up 4 days,  6:57,  1 user,  load average: 0.00, 0.00, 0.00
    Tasks:  60 total,   1 running,  59 sleeping,   0 stopped,   0 zombie
    Cpu(s): 0.3% us,  0.7% sy, 0.0% ni, 97.4% id,  0.4% wa,  0.1% hi, 1.1% si
    Mem:    191228k total,   171424k used,    19804k free,    19436k buffers
    Swap:   265064k total,     1284k used,   263780k free,   120480k cached
    PID USER PR NI VIRT RES SHR S %CPU %MEM  TIME+  COMMAND
     6779 root      16   0  2536  832  668 R  3.8  0.4   0:00.04 top
        1 root      16   0  2648  604  520 S  0.0  0.3   0:13.54 init
        2 root      34   19     0    0    0 S  0.0  0.0   0:00.07 ksoftirqd/0
    

      

    top - 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
        ·01:06:48 当前时间
        ·up 1:22 系统运行时间,格式为时:分
        ·1 user 当前登录用户数
        ·load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
      top -d 指定刷新间隔时间 默认为s
        空格 为立即刷新
     
    w和uptime 命令也能看到这些信息
     
    Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombieCpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0%st
        ·total 进程总数
        ·running 正在运行的进程数
        ·sleeping 睡眠的进程数
        ·stopped 停止的进程数
        ·zombie 僵尸进程数
          ·Cpu(s):
        ·0.3%us 用户空间占用CPU百分比 (用户态)
        ·1.0% sy 内核空间占用CPU百分比 (内核态)
        ·0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
        ·98.7% id 空闲CPU百分比
        ·0.0% wa 等待输入输出的CPU时间百分比
        ·0.0%hi:硬件CPU中断占用百分比
        ·0.0%si:软中断占用百分比
        ·0.0%st:虚拟机占用百分比
     
    Mem: 191272k total, 173656k used, 17616k free, 22052k buffersSwap: 192772k total, 0k used, 192772k free, 123988k cached
      ·Mem:
        ·191272k total 物理内存总量
        ·173656k used 使用的物理内存总量
        ·17616k free 空闲内存总量
        ·22052k buffers 用作内核缓存的内存量
      ·Swap:
        ·192772k total 交换区总量
        ·0k used 使用的交换区总量
        ·192772k free 空闲交换区总量
        ·123988k cached 缓冲的交换区总量,内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小,相应的内存再次被换出时可不必再对交换区写入。
     
    pstree命令
      用途:以树型结构显示各进程间的关系
      常用命令选项:
        -p:列出进程的PID号
    [root@localhost ~]# pstree -p
    init,1
      ├─acpid,2866
      ├─atd,3060
      ├─auditd,2516
      │   ├─python,2518 /sbin/audispd
      │   └─{auditd},2517
      ├─automount,2842
    ……
    

      

    pgrep命令
      用途:根据特定条件查询进程PID信息
      常用命令选项:
        -l:列出进程的名称
        -u:根据进程所属的用户名进行查找
        -t:根据进程所在的终端进行查找
    [root@localhost ~]# pgrep "init"
    1
    [root@localhost ~]# pgrep -l "log"
    2538 syslogd
    2541 klogd
    3221 login
    [root@localhost ~]# pgrep -l -u teacher -t tty1
    27483 bash
    27584 vim
    

      


    进程的状态
      D 无法中断的休眠状态(通常 IO 的进程); 
      R 正在运行,在可中断队列中;
      S 处于休眠状态,静止状态;
      T 停止或被追踪,暂停执行;
      W 进入内存交换(从内核2.6开始无效);
      X 死掉的进程;
      Z 僵尸进程不存在但暂时无法消除;
      W: 没有足够的记忆体分页可分配
      WCHAN 正在等待的进程资源;
      <: 高优先级进程
      N: 低优先级进程
      L: 有记忆体分页分配并锁在记忆体内 (即时系统或捱A I/O),即,有些页被锁进内存
      s 进程的领导者(在它之下有子进程);
      l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
      + 位于后台的进程组;
     
     
    进程优先级设置
      Linux内核的基本任务是调度进程
      每个进程受两个参数影响其调度
      优先级(priority):内核控制动态变化
      值越小越早被cpu执行
      用户无法直接调整数值大小
      niceness:表示进程可被执行的优先级的修正数值 ,可手工修改
      与priority有关
      优先级有正负之分(-20 -19)
      加入nice值后 PRI(新) = PRI(老) + nice
      root可以设置nice值范围(-20 - 19)
      普通用户可以设置nice值范围(0- 19)
      用nice命令新的nice(新开启的进程)
      以新的nice来启动命令
        nice -10 vi & 设置nice值为10
        nice --10 vi & 设置nice值为-10
      用renice命令设置新nice(已经存在的进程)
        renice 10 15132 设置nice值为10
        renice -10 15132 设置nice值为-10
      用top命令修改进程的优先级
      先输入r,然后输入pid,最后输入优先级
     
    kill命令
      软中断信号,简称信号。是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。
      kill -l列出Linux系统支持的信号种类
        发送信号的原因
        硬件异常
        软件状态
        终端中断
      kill命令用来发送信号
        kill -信号代码 PID
        进程收到信号后采取的行动
          终止
          忽略信号
          挂起
      用户常用的信号
     
    pkill命令
      用途:根据特定条件终止相应的进程
      常用命令选项:
        -u:根据进程所属的用户名终止相应进程
        -t:根据进程所在的终端终止相应进程
    [root@localhost ~]# w | grep -v "root"
    14:10:10 up  6:08,  4 users,  load average: 0.00, 0.01, 0.00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    teacher  tty1     -                14:04    5:34   0.16s  0.16s -bash
    hack      pts/1    173.17.17.174    14:05    4:32   0.17s  0.17s -bash 
    [root@localhost ~]# pkill -9 -t pts/1
    [root@localhost ~]# w | grep -v "root"
     14:12:22 up  6:10,  3 users,  load average: 0.00, 0.00, 0.00
    USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
    teacher  tty1     -                14:04    7:46   0.16s  0.16s -bash
    

       ↑踢出登录到系统的可疑用户hack

    总结:

      理解进程的概念

      掌握基本的进程查看命令

      掌握进程优先级的配置

      

  • 相关阅读:
    java进程占用CPU高的问题
    上下文切换的案例以及CPU使用率
    百度地图sdk问题 error inflating class com.baidu.mapapi.map.mapview
    Android APK反编译
    Binary XML file line #17<vector> tag requires viewportWidth > 0
    用代码实现签名
    百度地图出现UnsatisfiedLinkError: Native method not found: com.baidu...
    INSTALL_FAILED_INVALID_APK
    Android package属性、package name和Application ID三者的联系及区别
    Android使用百度定位API时获取的地址信息为null
  • 原文地址:https://www.cnblogs.com/qq1148932219/p/10685066.html
Copyright © 2011-2022 走看看