程序、 进程、线程

程序: 一些指令和数据的集合,是一个静态实体。
进程: 系统进行资源分配和调度的独立基本单位。
线程: 线程是操作系统能够进行运算调度的最小单位。一个线程指的是进程中单一顺序的控制流。一个进程中可以并发多个线程,每个线程并行执行不同人物。因为线程中几乎不包含系统资源,所以执行更快,更有效率。

三者之间的关系

一个程序至少有一个进程,一个进程至少有一个线程。线程被包含在进程之中,是进程中运行的实际运作 单位。另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存。

进程分类

进程可以从进程的功能与服务的对象来划分,从这个角度来划分,进程可以分为:

  • 用户进程: 通过执行用户程序、应用程序而产生的进程.
  • 系统进程: 通过执行系统内核程序而产生的进程,这样的进程运行不受用户干扰,即使是root用户也不行。

应用程序的服务类型来划分,进程可以分为:

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

进程的衍生

子进程是父进程通过系统调用fork() 而产生的复制品,fork()就是把父进程的PCB等进程数据结构信息直接复制过来,只是修改了PID,其余一模一样。只有执行了exec()之后才会有所不同。

子进程的退出与资源的回收

当一个子进程要正常的终止运行时,或者该进程结束时,它的主函数mian()会执行exit(n);或者return n,这里的返回值n是一个信号量,系统会把这个SIGCHLD信号量传给父进程。正常情况下,父进程会收到两个返回值:exit code(SIGCHLD 信号)与 reason for termination 。之后,父进程会使用 wait(&status) 系统调用以获取子进程的退出状态,然后内核就可以从内存中释放已结束的子进程的 PCB;而如若父进程没有这么做的话,子进程的 PCB 就会一直驻留在内存中,一直留在系统中成为僵尸进程(Zombie)。

进程 0 是系统引导时创建的一个特殊进程,也称之为内核初始化,其最后一个动作就是调用 fork() 创建出一个子进程运行 /sbin/init 可执行文件,而该进程就是 PID=1 的进程 1。
然后进程 0 就转为交换进程(也被称为空闲进程),进程 1 (init 进程)是第一个用户态的进程,再由它不断调用 fork() 来创建系统里其他的进程,所以它是所有进程的父进程或者祖先进程。同时它是一个守护程序,直到计算机关机才会停止

进程查看

top

top 可以实时查看进程状态以及系统的一些信息(如cpu、内存信息等)

centos一个进程能有多少个线程_centos一个进程能有多少个线程


第一行数据解释:

top 表示当前程序的名称
08:55:01 表示当前的系统的时间
up 21days,11:02 表示该机器已经启动了多长时间
1 user 表示当前系统中只有一个用户
load average: 3.53,4.95,8.61 分别对应1、5、15分钟内cpu的平均负载

白色行数据解释:

列名

解释

PID

进程id

USER

该进程的所属用户

PR

PR 值表示 Priority 值叫动态优先级,是进程在内核中实际的优先级值,进程优先级的取值范围是通过一个宏定义的,这个宏的名称是 MAX_PRIO,它的值为 140。Linux 实际上实现了 140 个优先级范围,取值范围是从 0-139,这个值越小,优先级越高。而这其中的 0 - 99 是实时进程的值,而 100 - 139 是给用户的。

NI

该进程的 nice 值。NICE 值叫做静态优先级,是用户空间的一个优先级值,其取值范围是-20至19。这个值越小,表示进程”优先级”越高,而值越大“优先级”越低。

VIRT

该进程任务所使用的虚拟内存的总数

RES

该进程所使用的物理内存数,也称之为驻留内存数

SHR

该进程共享内存的大小

S

该进程进程的状态: S=sleep R=running Z=zombie

%CPU

该进程CPU的利用率

%MEM

该进程内存的利用率

TIME+

该进程活跃的总时间

COMMAND

该进程运行的名字

PS 工具

ps可以静态来查看 当前的进程信息

centos一个进程能有多少个线程_linux_02

列名

解释

USER

进程的拥有用户

PID

进程的 ID

PPID

其父进程的 PID

SID

session 的 ID

TPGID

前台进程组的 ID

%CPU

进程占用的 CPU 百分比

%MEM

占用内存的百分比

NI

进程的 NICE 值

VSZ

进程使用虚拟内存大小

RSS

驻留内存中页的大小

TTY

终端 ID

S or STAT

进程状态

WCHAN

正在等待的进程资源

START

启动进程的时间

TIME

进程消耗CPU的时间

COMMAND

命令的名称和参数

ps -l可以显示自己这次登录的bash相关的进程信息罗列出来

centos一个进程能有多少个线程_父进程_03

pstree

pstree 查看当前活跃进程的树形结构,最主要的是可以看到所有进程之间的相关性。

centos一个进程能有多少个线程_父进程_04

pstree -up

-A  :各程序树之间以 ASCII 字元來連接;
-p  :同时列出每个 process 的 PID;
-u  :同时列出每个 process 的所屬账户名称。

centos一个进程能有多少个线程_内核_05

进程管理

ps aux 查看进程

centos一个进程能有多少个线程_内核_06


关闭进程id为278的vim程序进程

centos一个进程能有多少个线程_linux_07