Linux 进程概念

本文深入解析Linux进程管理,包括进程与程序的区别,进程的动态特性,线程的概念及其与进程的关系,进程分类如用户进程与系统进程,以及进程的衍生方式如fork()与exec()系统调用。此外,还探讨了进程组、sessions、工作管理等高级主题。

目标

对于linux进程有初步的概念(进程与程序,进程的衍生,工作管理)


学习目录

1.进程概念理解
2.进程的属性
2.1进程的分类
2.2进程的衍生
2.3进程组与sessions
2.4工作管理


1.进程概念理解

什么是程序,什么是进程?什么是线程?

程序:

程序是一个静态的概念,一般对应一个操作系统中的一个可执行文件(待执行),由一系列有逻辑,有顺序结构的指令组成

进程:

1.执行中的程序叫做进程,是一个动态的概念

2.进程是包含上下文切换的程序执行时间总和,是对应的CPU时间段的描述,是描述这一CPU时间段的名词。参考网址

3.进程,是计算机中的程序关于某数据集合上的一次运动活动,是系统进行资源分配和调度的基本单位。操作系统结构的基础。它的执行需要系统分配资源创建实体后才能进行。

4.在Linux2.6更新后,进程本身不是基本运行单位,而是线程的容器(只在Linux中)。

5 进程是程序的一次动态执行过程,占用特定的地址空间

6.每个进程由三部分组成:代码段,数据段,进程控制块每个进程都是独立的,拥有自己的cpu时间,代码和数据,即使一个程序产生了好几份进程,他们之间还是独立拥有自己的这三件东西,这样的缺点是:浪费内存,cpu负担较重参考网址

线程:

1.随着技术的发展,在执行一些细小任务时,本身无需分配单独资源,进程依然会繁琐的将资源分割,即浪费时间还浪费资源,然后专门运用于这个场景的多任务技术被创造——线程。进程可以产生多个线程,而这些线程可以共享进程的某些资源,所以进程不需要独立的资源就可以运行,可以节省资源与时间。

2.进程是操作系统能够进行运算调度的最小单位。它被包含在进程内,是进程中实际运作单位

3.线程是一个进程内部的一个执行单元,它是程序中的单一的顺序控制进程

4.一个进程拥有多个并行线程(需多个cpu)。

5.一个进程内的多个线程共享相同的内存地址空间,可以访问相同的变量和对象,它们从同一堆中分配对象并进行通信,数据交换和同步操作

6.它是比进程更为细小cpu时间段
进程与线程区别参考网址


2.进程的属性

进程的属性分为(进程的分类)(进程的衍生)(进程组与sessions)(工作管理)。


2.1进程的分类

两个角度:
一(进程的功能与服务的对象来分)
二(应用程序的服务类型)

进程的功能与服务对象
  • 用户进程:通过执行用户程序,应用程序或称之为内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。
  • 系统进程:通过执行系统内核程序而产生的进程,而且该进程的运行不受用户干预。即使root用户也不能干预系统进程的运行。
应用程序的服务类型
  • 交互进程:由shell终端启动的进程,在执行过程中,需要与用户进行交互操作。可以运行前台,也可以运行于后台。
  • 守护进程:一种一直运行的进程。例如httpd进程。

2.2进程的衍生

  1. 父进程与子进程:我们启动终端就是启动了一个bash进程,当我们在bash中再输入bash则会再启动一个bash进程。我们叫第一个bash进程为父进程第二个bash进程为其子进程

  2. fork()exec()
    fork():是一个system call,主要作用是为当前进程创建一个新的进程,这个新进程就是它的子进程,这个子进程除了父进程的返回值和PID以外其他的信息都一模一样。
    exec():也是系统调用,作用是切换子进程中的执行程序,替换其从父进程复制过来的代码段和数据段。

  3. 子进程退出与资源回收:当一个子进程要正常的终止运行时或该进程结束时它的主函数main()会执行exit(n);return n,这里的n是一个信号,系统会将这个SIGCHLD信号返回给父进程。

4.僵尸进程:当子进程代码执行部分已经结束执行,系统资源也基本归还给系统了,但若是其进程的进程控制块仍驻留在内存中,而它的PCB还在,代表这个进程还存在,并没有消亡Z(Zombie)表示僵尸进程。 缺点:子进程会占用PID,而系统会因为没有可用的PID从而导致不能产生新的进程。

5.孤儿进程:当父进程非正常结束,未能及时回收子进程,子进程仍在运行,这样的进程被称为孤儿进程。这样的进程会被init进程收养。

6.进程结构

进程0:是系统引导时创建的一个特殊进程,称为内核初始化,其最后一个动作就是调用fork()创建出一个子进程运行/sbin/init可执行文件,该进程的PID=1,进程0转化为空闲进程。
init进程:第一个用户态的进程,由它不断调用fork()来创建系统里的其他进程,是所有程序的父进程,同时它也是一个守护进程。
在这里插入图片描述
通过ps -fxo user,ppid,pid,pgid,command可以看到在这里插入图片描述
(pid是该进程的唯一编号)(ppid是该进程的父进程的pid)(command表示该进程通过执行什么样的命令或脚本产生的)参考网址


2.3进程组与sessions

  1. 进程组:每一个进程都是一个进程组的成员,每一个进程组都是唯一存在的,它们依靠PGID来区别,每当一个进程被创建的时候,它便会成为其父进程所在组的一员。
    一般来说,该进程组的PGID等同于进程组的第一个成员的PID,该进程是这个进程组的主进程。主进程可以先终结,此时进程组仍然存在,并持有相同的PID,知道进程组中的最后一个进程结束。
    每一个进程组sessions中,并且这个sessions是唯一存在的。

2.sessions:sessions是针对一个tty建立。sessions中的每一个进程都称为job,每一个会话可以连接一个终端。
sessions 的主要作用是:将多个jobs囊括在一个终端,并取其中一个job作为前台,直接接收该终端的输入输出以及终端信号,其他job在后台运行。


2.4工作管理

每个bash(终端)只能管理当前终端的job。

[job] &    #&让命令在后台运行

ctrl+z    #当前工作停止并转到后台

jobs     #查看停止并被放置在后台的工作

fg [%jobnumber]    #将在后台的工作拿到前台来 
#例:fg %1    #将后台job编号为1的job拿到前台来 

bg [%jobnumber]    #将job在后台运作
#例: bg %1    #将后台job编号为1的job在后台运行

kill [-信号值] [%jobnumber]     #删除或重启job
kill信号值补充:
-1: 重新读取参数运行
-2:如同ctrl+c的操作退出
-9:强制终止该任务
-15:正常的方式终止该任务
### Linux 进程基本概念详解 Linux 系统中的进程是操作系统进行资源分配和调度的基本单位,每个运行中的程序都对应一个进程进程的管理与调度是操作系统的核心功能之一[^1]。以下将从多个方面对 Linux 进程的基本概念进行详细说明。 #### 1. 进程的状态 在 Linux 系统中,进程具有多种状态,这些状态反映了进程当前的行为和生命周期。通常,Linux 中的进程有以下几个主要状态: - **创建状态**:当一个新的进程被创建时,它处于此状态。 - **就绪状态**:进程已经准备好运行,等待 CPU 资源分配。 - **执行状态**:进程正在 CPU 上运行。 - **阻塞状态(等待状态)**:进程因等待某些事件(如 I/O 操作完成)而暂停运行。 - **终止状态**:进程已完成或被终止。 此外,Linux 特有的状态还包括: - **D状态(不可中断的睡眠状态)**:这是一种深度睡眠状态,通常发生在进程与硬件交互时,例如等待慢速设备完成操作。该状态下的进程无法被信号唤醒或终止,只能通过等待其完成或重启系统来解决[^2]。 - **Z状态(僵尸状态)**:当子进程退出后,父进程尚未回收其退出状态时,子进程会进入僵尸状态。这种状态的进程仅保留在进程表中,不占用任何实际资源[^5]。 #### 2. 进程控制块(PCB) 每个进程都有一个对应的进程控制块(Process Control Block, PCB),它是操作系统用来描述和管理进程的数据结构。PCB 包含了进程的所有信息,包括但不限于: - 进程标识符(PID) - 内存管理信息 - CPU 寄存器状态 - 文件描述符表 - 其他资源使用情况 PCB 是操作系统管理和调度进程的基础,通过它,操作系统可以跟踪和控制每个进程的运行状态[^4]。 #### 3. 进程的优先级与竞争性 由于系统中可能存在大量的进程,而 CPU 的资源有限,因此进程之间存在竞争关系。为了更高效地完成任务,操作系统引入了进程优先级的概念进程优先级决定了进程在 CPU 调度中的顺序,高优先级的进程通常会优先获得 CPU 资源。可以通过 `nice` 命令调整进程的优先级[^3]。 #### 4. 进程的并行与并发 - **并行**:在多核或多 CPU 系统中,多个进程可以同时运行,这称为并行。 - **并发**:在单核 CPU 系统中,操作系统通过时间片轮转等调度策略,在一段时间内让多个进程轮流运行,从而实现并发的效果[^3]。 #### 5. 创建子进程Linux 系统中,可以通过 `fork()` 系统调用创建子进程。`fork()` 函数会复制当前进程的所有资源,并生成一个几乎完全相同的子进程。子进程拥有独立的地址空间和资源,但继承了父进程的部分属性,例如文件描述符和环境变量[^4]。 ```python import os pid = os.fork() if pid == 0: # 子进程代码 print("子进程 PID:", os.getpid()) else: # 父进程代码 print("父进程 PID:", os.getpid(), "子进程 PID:", pid) ``` #### 6. 查看进程 Linux 提供了多种工具用于查看和管理进程,例如: - `ps` 命令:显示当前系统的进程状态。 - `top` 命令:实时监控系统中各个进程的资源使用情况。 - `kill` 命令:向指定进程发送信号以终止或控制其行为。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值