zoukankan      html  css  js  c++  java
  • Liunx学习总结(六)--进程

    进程概述

    简单来讲程序是一个包含可以执行代码的静态的文件。进程是一个开始执行但是还没有结束的程序的实例。当程序被系统调用到内存以后,系统会给程序分配一定的资源(内存,设备等等)然后进行一系列的复杂操作,使程序变成进程以供系统调用。

    进程分类

    按照进程的功能和运行的程序分类,进程可划分为两大类:

    • 系统进程
    可以执行内存资源分配和进程切换等管理工作,而且该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。
    
    • 用户进程
    通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
    

    用户进程又可以分为如下3类:

    • 交互进程:由一个 Shell 终端其他的进程,在执行过程中,需要与用户进行交互操作,可以运行于前台,也可以运行于后台。
    • 批处理进程:该进程是一个进程集合,负责按顺序启动其他的进程。
    • 守护进程:守护进程是一直运行的一种进程,经常在 Linux 系统时启动,在系统关闭时终止。它们独立于控制终端且周期性地质学某种任务或等待处理某些发生的时间。例,httpd 进程,crond 进程等。

    进程状态

    Linux上进程有5种状态:

    • 运行:正在运行或在运行队列中等待。
    • 中断:休眠中, 受阻, 在等待某个条件的形成或接受到信号。
    • 不可中断:收到信号不唤醒和不可运行, 进程必须等待直到有中断发生。
    • 僵死:进程已终止, 但进程描述符存在, 直到父进程调用 wait4() 系统调用后释放。
    • 停止:进程收到 SIGSTOP, SIGSTP, SIGTIN, SIGTOU 信号后停止运行运行。

    进程ID与父子进程

    一个程序可能有许多进程,而每一个进程又可以有许多子进程。依次循环下去,而产生子孙进程。

    为了区分各个不同的进程,系统给每一个进程分配了一个 ID 以便识别。Linux 系统中,进程 ID(PID)是区分不同进程的唯一标识。PPID 表示父进程。所有的进程都是 PID 为1的 init 进程的后代。内核在系统启动的最后阶段启动 init 进程。

    一般每个进程都会有父进程,父进程与子进程之间是管理与被管理的关系,当父进程停止时,子进程也随之消失,但子进程关闭,父进程不一定终止。

    注:CentOS 6上,init 进程是所有进程的父进程,CentOS 7上则为systemd。

    僵尸进程

    每个进程在结束后都会处于僵死状态,等待父进程将其释放资源,处于该状态的进程已经结束,但父进程还没有释放其系统资源。

    由于某种原因,父进程在子进程退出前退出,则所有子进程就变成一个孤儿进程,拖没有相应处理机制,则孤儿进程会一直处于僵死状态,资源无法释放。这种僵死的孤儿进程即僵尸进程。

    此时解决方法是在启动进程内找一个进程作为这些孤儿进程的父进程,或者直接让 init 进程作为它们的父进程,进而释放孤儿进程占用的资源。

    线程

    线程在Linux中被称为轻量级的进程。

    进程有独立的内存地址空间,线程没有。线程不能独立存在,线程由进程创建的。

    常用进程命令

    查看进程

    语法
    ps [options] [--help]
    

    ps 的参数非常多, 在此仅列出几个常用的参数并大略介绍含义

    -A 列出所有的行程
    -w 显示加宽可以显示较多的资讯
    -au 显示较详细的资讯
    -aux 显示所有包含其他使用者的行程
    au(x) 输出格式 :
    USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
    USER: 行程拥有者
    PID: pid
    %CPU: 占用的 CPU 使用率
    %MEM: 占用的记忆体使用率
    VSZ: 占用的虚拟记忆体大小
    RSS: 占用的记忆体大小
    TTY: 终端的次要装置号码 (minor device number of tty)
    STAT: 该行程的状态:
    D: 不可中断的静止 (通悸□□缜b进行 I/O 动作)
    R: 正在执行中
    S: 静止状态
    T: 暂停执行
    Z: 不存在但暂时无法消除
    W: 没有足够的记忆体分页可分配
    <: 高优先序的行程
    N: 低优先序的行程
    L: 有记忆体分页分配并锁在记忆体内 (实时系统或捱A I/O)
    START: 行程开始时间
    TIME: 执行的时间
    COMMAND:所执行的指令
    
    实例

    实例1:显示指定用户信息

    ps -u root
    

    实例2:显示出所有的java进程,去处掉当前的grep进程。

    ps -ef|grep java|grep -v grep
    

    终止进程

    语法
    kill (选项) (参数)
    

    选项:

    -a:当处理当前进程时,不限制命令名和进程号的对应关系;
    -l <信息编号>:若不加<信息编号>选项,则-l参数会列出全部的信息名称;
    -p:指定kill 命令只打印相关进程的进程号,而不发送任何信号;
    -s <信息名称或编号>:指定要送出的信息;
    -u:指定用户。
    

    参数:

    进程或作业识别号:指定要删除的进程或作业。
    

    常用的信号:

    HUP     1    终端断线
    INT     2    中断(同 Ctrl + C)
    QUIT    3    退出(同 Ctrl + )
    TERM   15    终止
    KILL    9    强制终止
    CONT   18    继续(与STOP相反, fg/bg命令)
    STOP   19    暂停(同 Ctrl + Z)
    
    实例

    查找 vim 进程并终止

    [marklogzhu@VM_0_15_centos /]$ ps -ef | grep vim
    marklog+ 26363  1151  0 14:25 pts/0    00:00:00 grep --color=auto vim
    [marklogzhu@VM_0_15_centos /]$ kill -9 26363
    bash: kill: (26363) - No such process
    
    

    监控系统进程

    top 命令可以动态管理监控 linux 进程,非常类似于 Windows 任务管理器。top 命令是一个功能十分强大的监控系统的工具,对于系统管理员而言尤其重要。但是,它的缺点是会消耗一定的系统资源。

    语法
    top (选项)
    

    选项:

    -b:以批处理模式操作;
    -c:显示完整的治命令;
    -d:屏幕刷新间隔时间;
    -I:忽略失效过程;
    -s:保密模式;
    -S:累积模式;
    -i<时间>:设置间隔时间;
    -u<用户名>:指定用户名;
    -p<进程号>:指定进程;
    -n<次数>:循环显示的次数。
    

    在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。

    h:显示帮助画面,给出一些简短的命令总结说明;
    k:终止一个进程;
    i:忽略闲置和僵死进程,这是一个开关式命令;
    q:退出程序;
    r:重新安排一个进程的优先级别;
    S:切换到累计模式;
    s:改变两次刷新之间的延迟时间(单位为s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s;
    f或者F:从当前显示中添加或者删除项目;
    o或者O:改变显示项目的顺序;
    l:切换显示平均负载和启动时间信息;
    m:切换显示内存信息;
    t:切换显示进程和CPU状态信息;
    c:切换显示命令名称和完整命令行;
    M:根据驻留内存大小进行排序;
    P:根据CPU使用百分比大小进行排序;
    T:根据时间/累计时间进行排序;
    w:将当前设置写入~/.toprc文件中。
    
  • 相关阅读:
    iOS开发拓展篇—音频处理(音乐播放器2)
    iOS开发拓展篇—音频处理(音乐播放器1)
    iOS开发拓展篇—UIDynamic(捕捉行为)
    iOS开发拓展篇—UIDynamic(重力行为+碰撞检测)
    iOS开发拓展篇—UIDynamic(简单介绍)
    iOS开发拓展篇—封装音频文件播放工具类
    iOS开发拓展篇—音乐的播放
    iOS开发拓展篇—音效的播放
    iOS开发拓展篇—静态库
    (转)Android Studio系列教程一下载与安装 背景Android Studio VS Eclipse准备下载创建HelloWorld项目
  • 原文地址:https://www.cnblogs.com/markLogZhu/p/11399448.html
Copyright © 2011-2022 走看看