Linux学习笔记—— Linux进程概念

Posted Johnny*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux学习笔记—— Linux进程概念相关的知识,希望对你有一定的参考价值。

程序、 进程、线程

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

三者之间的关系

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

进程分类

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

  • 用户进程: 通过执行用户程序、应用程序而产生的进程.
  • 系统进程: 通过执行系统内核程序而产生的进程,这样的进程运行不受用户干扰,即使是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() 来创建系统里其他的进程,所以它是所有进程的父进程或者祖先进程。同时它是一个守护程序,直到计算机关机才会停止

以上是关于Linux学习笔记—— Linux进程概念的主要内容,如果未能解决你的问题,请参考以下文章

学习笔记

Linux进程——学习笔记

Linux进程——学习笔记

Linux进程——学习笔记

Linux内核分析——第六周学习笔记

Linux 学习笔记