1.有关进程的基本概念
  (1)process(进程):运行中的程序的副本
  (2)内核的功用:
             进程管理,文件系统,网络管理,内存管理,驱动程序,安全管理
  (3)当进程需要用到特权指令时,会产生软中断。通过系统调 用将操作权转交给内核执行特权指令,执行完毕后回复到用户空间(模式切换)
  (4)task structure:是一种结构体数据格式的位于内存中内核空间的区域,是进程的“户口本”,记录内存中各种进程的状态信息,从而帮助进程实现“现场保护”
  (5)进程的创建:
             1)init有kernel创建,其他的进程均为父子关系
             2)进程都是由父进程创建,并且满足cow机制,即写时复制机制(即在子进程未写之前仅共享)。通俗讲就是在对子进程进行写操作之前,它是和父进程共享
                内存空间的,一旦我们对子进程进行写操作时,父进程会复制自己的进程空间到新的内存空间中,给子进程使用。
  (6)进程的优先级:0-139
             1-99:实时优先级
             100-139:静态优先级
                   其中数字越小,优先级越高

             NICE值:对普通用户来说只能调低优先级
                   -20,19


2.内存中的进程的相关概念
   (1)Page Frame:叶框,用于存储页面数据
   (2)MMU:Memory Management Unit 内存管理单元,是cpu的芯片
   (3)虚拟内存中的线性地址空间中的数据与物理内存的物理地址空间数据的对应关系存放在task struct中
   (4)常驻内存集:不能被交换到交换分区的数据
        虚拟内存集:可以被交换到交换分区的数据
   (5)IPC: Inter Process Communication进程间通信
         1)在同一台主机上
                     signal:发信号
                     shm:shared memory
                     semenphor:旗语
         2)在不同主机上
                     rpc:remote procecure call 远程过程调用
                     socket:基于套接字通信(其原理是一端往socket文件中写数据,另一端读取socket文件中的数据)


3.进程的分类以及状态
   (1)进程类型:
               守护进程:daemon,在系统引导过程中启动的进程,跟终端无关的进程
               前台进程:跟终端相关并且通过终端启动的进程
        注:也可把在前台启动的进程送往后台,以守护模式运行
   (2)进程状态
             运行态:running
             就绪态:ready
             睡眠态:
                 可中断:interruptable(自然执行完毕而睡眠)
                 不可中断:uninterruptable(必要数据未准备完全不能唤醒执行)
             停止态:暂停于内存中,但不会被调度,除非手动执行之:stopped
             僵死态:zombie,直到父进程将其杀死
          注:一次IO操作分两次:从磁盘加载到内核内存中,接着从内核内存放置到内存空间中

   (3)进程的分类
            CPU-Bound:CPU密集型,较长的CPU时间段,降低NICE值
            IO-Bound:IO密集型



4.进程查看以及管理的工具
   
   linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

  pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup,fuser,lsof



  (1) pstree命令
          

pstree:display a tree of process

  (2) ps: process state          
          ps: report a snapshot of the current processes
         ps [OPTION]...
        选项:支持两种风格

        常用组合:aux
          u: 以用户为中心组织进程状态信息显示
          a: 与终端相关的进程;
          x: 与终端无关的进程;

          ~]# ps aux
          USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
            VSZ: Virtual memory SiZe,虚拟内存集
            RSS: ReSident Size, 常驻内存集
            STAT:进程状态
              R:running
              S: interruptable sleeping
              D: uninterruptable sleeping
              T: stopped
              Z: zombie

              +: 前台进程
              l: 多线程进程
              N:低优先级进程
              <: 高优先级进程
              s: session leader

        常用组合:-ef
          -e: 显示所有进程
          -f: 显示完整格式程序信息

        常用组合:-eFH
          -F: 显示完整格式的进程信息
          -H: 以进程层级格式显示进程相关信息

        常用组合:-eo, axo
          -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm
          axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

            ni: nice值
            pri: priority,优先级
            psr: processor, CPU
            rtprio: 实时优先级

      EXAMPLES
            To see every process on the system using standard syntax:
                 ps -e
                 ps -ef
                 ps -eF
                 ps -ely
           To see every process on the system using BSD syntax:
                 ps ax
                 ps axu
           To print a process tree:
                 ps -ejH
                 ps axjf
           To get info about threads:
                 ps -eLf
                 ps axms
           To get security info:
                 ps -eo euser,ruser,suser,fuser,f,comm,label
                 ps axZ
                 ps -eM
           To see every process running as root (real & effective ID) in
           user format:
                 ps -U root -u root u
           To see every process with a user-defined format:
                 ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
                 ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm
                 ps -eopid,tt,user,fname,tmout,f,wchan
           Print only the process IDs of syslogd:
                 ps -C syslogd -o pid=
 
           Print only the name of PID 42:
                 ps -q 42 -o comm=


    (3)pgrep, pkill:

            pgrep [options] pattern
            pkill [options] pattern

              -u uid: effective user
              -U uid: real user
              -t terminal: 与指定终端相关的进程
              -l: 显示进程名
              -a: 显示完整格式的进程名
              -P pid: 显示其父进程为此处指定的进程的进程列表

              pidof:
          根据进程名获取其PID;

    (4) top:
          有许多内置命令:
            排序:
              P:以占据的CPU百分比;
              M:占据内存百分比;
              T:累积占据CPU时长;

            首部信息显示:
              uptime信息:l命令
              tasks及cpu信息:t命令
                cpu分别显示:1 (数字)
              memory信息:m命令

            退出命令:q
            修改刷新时间间隔:s
            终止指定进程:k

          选项:
            -d #: 指定刷新时间间隔,默认为3秒;
            -b: 以批次方式;
            -n #: 显示多少批次;

    (5)htop命令:
          选项:
            -d #: 指定延迟时间;
            -u UserName: 仅显示指定用户的进程;
            -s COLOMN: 以指定字段进行排序;
          命令:
            s: 跟踪选定进程的系统调用;
            l: 显示选定进程打开的文件列表;
            a:将选定的进程绑定至某指定CPU核心;
            t: 显示进程树


    (6) vmstat命令:

           vmstat [options] [delay [count]]

 
             procs:
                r:等待运行的进程的个数;
                b:处于不可中断睡眠态的进程个数;(被阻塞的队列的长度);
           memory:
                swpd: 交换内存的使用总量;
                free:空闲物理内存总量;
                buffer:用于buffer的内存总量;
                cache:用于cache的内存总量;
           swap:
                si:数据进入swap中的数据速率(kb/s)
                so:数据离开swap中的数据速率(kb/s)
           io:
                bi:从块设备读入数据到系统的速率;(kb/s)
                bo: 保存数据至块设备的速率;
           system:
                in: interrupts, 中断速率;
                cs: context switch, 进程切换速率;
           cpu:
                us
                sy
                id
                wa
                st

         选项:
                -s: 显示内存的统计数据

     (7) pmap命令:
           pmap - report memory map of a process

             pmap [options] pid [...]


                -x: 显示详细格式的信息;

             另外一种实现:
                # cat /proc/PID/maps

     (8)glances命令:

           glances [-bdehmnrsvyz1] [-B bind] [-c server] [-C conffile] [-p port] [-P password] [--password] [-t refresh] [-f file] [-o output]




        内建命令:

            a  Sort processes automatically     l  Show/hide logs
            c  Sort processes by CPU%           b  Bytes or bits for network I/O
            m  Sort processes by MEM%           w  Delete warning logs
            p  Sort processes by name           x  Delete warning and critical logs
            i  Sort processes by I/O rate       1  Global CPU or per-CPU stats
            d  Show/hide disk I/O stats         h  Show/hide this help screen
            f  Show/hide file system stats      t  View network I/O as combination
            n  Show/hide network stats          u  View cumulative network I/O
            s  Show/hide sensors stats          q  Quit (Esc and Ctrl-C also work)
            y  Show/hide hddtemp stats

 
        常用选项:
           -b: 以Byte为单位显示网卡数据速率;
           -d: 关闭磁盘I/O模块;
           -f /path/to/somefile: 设定输入文件位置;
           -o {HTML|CSV}:输出格式;
           -m: 禁用mount模块
           -n: 禁用网络模块
           -t #: 延迟时间间隔
           -1:每个CPU的相关数据单独显示;

        C/S模式下运行glances命令:
           服务模式:
            glances -s -B IPADDR

            IPADDR: 指明监听于本机哪个地址

        客户端模式:
            glances -c IPADDR

            IPADDR:要连入的服务器端地址

      (9) dstat命令:
  

           dstat [-afv] [options..] [delay [count]]
               -c: 显示cpu相关信息;
               -C #,#,...,total
               -d: 显示disk相关信息;
               -D total,sda,sdb,...
               -g:显示page相关统计数据;
               -m: 显示memory相关统计数据;
               -n: 显示network相关统计数据;
               -p: 显示process相关统计数据;
               -r: 显示io请求相关的统计数据;
               -s: 显示swapped相关的统计数据;
               --tcp
               --udp
               --unix
               --raw
               --socket 
               --ipc
               --top-cpu:显示最占用CPU的进程;
               --top-io: 显示最占用io的进程;
               --top-mem: 显示最占用内存的进程;
               --top-lantency: 显示延迟最大的进程;

       (10) kill命令:

              向进程发送控制信号,以实现对进程管理

                显示当前系统可用信号:
                  # kill -l
                  # man 7 signal

              常用信号:
                  1) SIGHUP: 无须关闭进程而让其重读配置文件;
                  2) SIGINT: 中止正在运行的进程;相当于Ctrl+c;
                  9) SIGKILL: 杀死正在运行的进程;
                  15) SIGTERM:终止正在运行的进程;
                  18) SIGCONT:
                  19) SIGSTOP:

             指定信号的方法:
                  (1) 信号的数字标识;1, 2, 9
                  (2) 信号完整名称;SIGHUP
                  (3) 信号的简写名称;HUP

             向进程发信号:
                   kill [-SIGNAL] PID...

             终止“名称”之下的所有进程:
                   killall [-SIGNAL] Program