一、引入进程
  1、内存划分为:用户空间和内核空间
  1、在用户空间里运行的进程,是用户进程,所属的状态为用户态
  2、在内核空间里运行的进程,是系统进程,所属的状态为内核态
  例:执行内核里的代码的时候,是属于内核态。
  Linux的kernel其实是一个软件,比较核心而已。
  内核作用:
  1.对cpu进行调度管理
  2.对内存进行管理
  3.对进程进行管理
  4.对文件系统进行管理
  5.对其他的硬件管理
  2、内核空间的进程可以访问用户空间,但是用户空间的进程不能访问内核空间。

  二、进程
  process是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源(内存、CPU)分配和调度的一个独立单位。
  1、进程控制块(PCB)
  是系统感知进程存在的凭证,是数据结构,占用内存空间。
  2、进程上下文
  1、上文:已执行过的进程指令和数据在相关寄存器和堆栈中的内容称为上文。
  2、正文:正在执行的指令和数据在相关寄存器和堆栈中的内容。
  3、下文:待执行的指令和数据在相关寄存器和堆栈中的内容。
  进程上下文切换:
  指多任务系统中,CPU的控制权由运行任务,转移到另外一个绪任务时所发生的事件;当前运行任务转为绪(或者挂起、删除)状态,另一个被选定的绪任务成为当前任务。
  3、线程
  thread只能归属于一个进程并且它只能访问该进程所拥有的资源。当操作系统创建一个进程后,该进程会自动申请一个名为主线程或首要线程的线程。
  简而言之:
  1、一个程序至少有一个进程,一个进程至少有一个线程;
  2、线程的划分尺度小于进程,使得多线程程序的并发性高;
  3、进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。

  shell> echo $PPID    //查看父进程ID
  2100
  shell> echo $$    //查看当前进程ID
  2102
  三、ps命令
  用于查看os进程信息。
  1、ps命令查看这些数据
  1、描述信息:pid 进程名 父子shell的家族关系等
  2、控制信息:进程当前状态、进程优先级等
  3、资源管理信息:占多少内存,打开了多少个文件等
  4、cpu现场保护结构
  注意:ps命令查看静态的进程统计信息。
  2、常见ps命令
  shell> ps aux 或 ps -elf
  a:显示当前终端启动的进程
  u:显示用户为主的进程信息
  x:显示所有进程信息
  -e:显示系统内的所有进程信息
  -l:使用长格式显示进程信息
  -f:使用完整的格式显示进程信息
  [root@localhost ~]# ps aux
  USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
  解析:
  PID   进程的ID;
  %CPU  进程占用的CPU百分比;
  %MEM  占用内存的百分比;
  COMMAND 命令的名称和参数
  [root@localhost ~]# ps -elf
  F S UID PID PPID C PRI NI ADDR SZ WCHAN STIME TTY TIME CMD
  解析:
  R 正在运行,在可中断队列中(绪状态);
  S 处于休眠状态,静止状态;
  Z 僵尸进程不存在但暂时无法消除;
  四、top命令
  查看动态的进程排名信息。
  1、命令行直接top命令
  [root@localhost ~]# top

  等待输入……
  h获得帮助
  1:显示各CPU情况
  P:按%CPU排序
  M:按%MEM排序
  空格:马上刷新(默认3秒)
  q:退出(默认的top会一直占用当前端口)
  解析:load average: 0.06, 0.60, 0.48
  表示系统负载,即任务队列的平均长度。
  三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。(w和uptime也可以查看top的顶头信息)
  2、top命令常接选项
  [root@localhost ~]# top -d 1 -n 5 -p 1
  -d 1    指定刷新间隔时间为1秒
  -n 5    刷新次数
  -p 1    显示指定PID为1的进程信息,如果要指定多个PID,用逗号分开