进程和线程的概念及Linux操作

news2025/4/5 20:08:21

文章目录

  • 一、进程与线程
    • 1、进程
    • 2、线程
    • 3、查看进程与线程
  • 二、Linux的“虚拟内存管理”,它与stm32中的 真实物理内存(内存映射)有什么区别?
  • 三、Linux系统调用函数 fork()、wait()、exec() 等
    • 1、fork()函数
    • 2、exec()函数
    • 3、wait()函数
    • 4、fork()函数编写

一、进程与线程

进程(Process)和线程(Thread)是操作系统中实现多任务的核心概念,它们在资源分配、执行方式和通信机制上有显著区别。以下是它们的核心差异和关系:

1、进程

独立的任务单位:进程是程序的一次执行实例,拥有独立的内存空间、系统资源(如文件句柄、网络连接等)。
隔离性:不同进程之间资源相互隔离,一个进程崩溃不会直接影响其他进程。
开销大:进程创建、销毁和切换需要操作系统分配/回收资源(如内存、文件描述符),开销较高。

2、线程

轻量级执行单元:线程是进程内的一个执行分支,共享进程的内存和资源。
共享性:同一进程的所有线程共享代码段、堆内存、全局变量等。
开销小:线程创建、切换和通信的成本远低于进程。

3、查看进程与线程

1、ps -a查看进程
2、kill 2101杀死进程,但由于这个进程是在用ps命令瞬时的,所以查看该进程时就显示 no process
3、ps -T -p 1587查看进程里的线程
请添加图片描述

二、Linux的“虚拟内存管理”,它与stm32中的 真实物理内存(内存映射)有什么区别?

在这里插入图片描述

三、Linux系统调用函数 fork()、wait()、exec() 等

fork()、wait() 和 exec() 是 Linux/Unix 系统中与进程管理相关的核心系统调用函数,属于 POSIX 标准的一部分。它们的作用和分类如下

1、fork()函数

类别:进程创建函数(系统调用)。
作用:
创建一个与父进程几乎完全相同的子进程(复制父进程的代码、数据、堆栈等)。
子进程从 fork() 的返回处开始执行。
父进程和子进程通过返回值区分(父进程返回子进程的 PID,子进程返回 0)。
底层实现:
直接调用 Linux 内核的 sys_fork 系统调用,触发进程复制

2、exec()函数

类别:程序加载函数(系统调用族)。
作用:
用一个新的程序替换当前进程的代码段(如加载 ls、echo 等外部程序)。
成功调用后,原进程的代码被完全替换,但 PID 不变。
常见的变体:execl(), execv(), execvp() 等。
底层实现:
调用 sys_execve 系统调用,由内核加载新程序到内存。

3、wait()函数

类别:进程同步函数(系统调用)。
作用:
父进程阻塞等待子进程终止,并回收子进程资源(避免僵尸进程)。
可获取子进程的退出状态(通过 WEXITSTATUS 等宏解析)。
常用函数:wait()、waitpid()。
底层实现:
调用 sys_wait4 系统调用,由内核管理进程状态同步。

4、fork()函数编写

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
int main() {
    pid_t pid = fork();
    	if (pid < 0) {
        // fork 失败
        	fprintf(stderr, "Fork failed\n");
        	return 1;
	} else if (pid == 0) {
        // 子进程代码
        printf("子进程: PID = %d, 父进程 PID = %d\n", getpid(), getppid());
        _exit(0);  // 子进程明确退出
    } else {

	  printf("父进程: PID = %d, 子进程 PID = %d\n", getpid(), pid);
        wait(NULL); 
    }

return 0;
}

调用在这里插入图片描述
当你运行 ./fork_test 时:
父进程(PID=1308671)创建了一个 子进程(PID=1308672)。
父进程通过 wait(NULL) 等待子进程退出,子进程通过 _exit(0) 立即退出。
程序输出中的 PID 是 程序运行时父进程和子进程的实时 PID,此时两个进程尚未结束。

当你在程序结束后运行 ps -a 时:
父进程和子进程已经退出,它们的 PID 已被内核回收。
ps -a 显示的进程(PID=1308820)是 ps 命令自身的进程(执行 ps 时新创建的进程)。
ps -a 只显示当前存活的进程,已退出的进程不会出现在结果中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2328772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

APang网联科技项目报告【服务器篇】

APang网联科技&#xff1a;连接未来&#xff0c;智能领航 公司简介 APang网联科技成立于 [2005年]&#xff0c;总部位于 [广东深圳]&#xff0c;是一家集网络技术研发、系统集成、项目实施与运维服务为一体的高新技术企业。我们致力于为客户提供全方位、定制化的网络部署解决…

[MySQL初阶]MySQL表的操作

MySQL表的操作 1. 创建表2. 查看表结构3. 修改表&#xff08;修改表的属性而非表的数据&#xff09;4. 删除表 1. 创建表 语法&#xff1a; CREATE TABLE table_name (field1 datatype,field2 datatype,field3 datatype ) character set 字符集 collate 校验规则 engine 存储…

AI助力高效PPT制作:从内容生成到设计优化

随着人工智能技术的不断发展&#xff0c;AI在各个领域的应用日益普及&#xff0c;尤其是在文档和演示文稿的创建过程中。PowerPoint&#xff08;PPT&#xff09;作为最常用的演示工具之一&#xff0c;借助AI的技术手段&#xff0c;可以极大地提高制作效率并提升最终呈现效果。在…

《双影奇境》手机版上线?ToDesk用跨平台技术实现「全设备云电脑3A游戏」

《双影奇境》是由Hazelight Studios研发发行的一款双人合作冒险类游戏&#xff0c;玩家们在游戏中将扮演米欧和佐伊两位风格迥异的女作家&#xff0c;剧情讲述的是她们被骗进入一台意在窃取创意的机器后便陷入了自己创作的故事之中&#xff0c;并且必须相互依靠&#xff0c;努力…

spring IOC 反射 bean生命周期

目录 反射 反射三种方式 获取反射中的Class对象 通过反射创建类对象 通过反射获取类属性、方法、构造器 IOC 概念 原理 实现方式 基于 XML 配置 基于注解配置 IOC优点 IOC的初始化过程 1. 资源定位 3. Bean 定义注册 4. BeanFactory 后置处理 5. Bean 后置处理…

Pytorch中预置数据集的加载方式

Pytorch中数据集加载方式 数据类型​PyTorch 模块​是否预置数据集图像/视频torchvision.datasets✅ 是音频torchaudio.datasets✅ 是文本torchtext.datasets✅ 是&#xff08;需安装&#xff09;自定义数据torch.utils.data❌ 否&#xff08;需手动实现&#xff09;多模态/第三…

ARM-----数据处理、异常处理、模式切换

实列一&#xff1a; 1. 异常向量表 area reset, code, readonly code32 entry area reset, code, readonly&#xff1a;定义一个名为reset的代码区域&#xff0c;只读。 code32&#xff1a;指示编译器生成32位ARM指令。 entry&#xff1a;标记程序的入口点。 2. 程序入口…

d202541

目录 一、分隔链表 二、旋转链表 三、删除链表中重复的数字 一、分隔链表 用两个list存一下小于和大于等于 x的节点 最后串起来就行 public ListNode partition(ListNode head, int x) {ListNode ret new ListNode(1);ListNode cur ret;List<ListNode> small new A…

YOLOv12 从预训练迈向自主训练,第一步数据准备

视频讲解&#xff1a; YOLOv12 从预训练迈向自主训练&#xff0c;第一步数据准备 前面复现过yolov12&#xff0c;使用pre-trained的模型进行过测试&#xff0c;今天来讲下如何训练自己的模型&#xff0c;第一步先准备数据和训练格式 https://gitcode.com/open-source-toolkit/…

【UVM学习笔记】更加灵活的UVM—通信

系列文章目录 【UVM学习笔记】UVM基础—一文告诉你UVM的组成部分 【UVM学习笔记】UVM中的“类” 文章目录 系列文章目录前言一、TLM是什么&#xff1f;二、put操作2.1、建立PORT和EXPORT的连接2.2 IMP组件 三、get操作四、transport端口五、nonblocking端口六、analysis端口七…

NSSCTF [HGAME 2023 week1]simple_shellcode

3488.[HGAME 2023 week1]simple_shellcode 手写read函数shellcode和orw [HGAME 2023 week1]simple_shellcode (1) motalymotaly-VMware-Virtual-Platform:~/桌面$ file vuln vuln: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpret…

数据集(Dataset)和数据加载器(DataLoader)-pytroch学习3

pytorch网站学习 处理数据样本的代码往往会变得很乱、难以维护&#xff1b;理想情况下&#xff0c;我们希望把数据部分的代码和模型训练部分分开写&#xff0c;这样更容易阅读、也更好维护。 简单说&#xff1a;数据和模型最好“分工明确”&#xff0c;不要写在一起。 PyTor…

数据结构|排序算法(一)快速排序

一、排序概念 排序是数据结构中的一个重要概念&#xff0c;它是指将一组数据元素按照特定的顺序进行排列的过程&#xff0c;默认是从小到大排序。 常见的八大排序算法&#xff1a; 插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序、基数排序 二、快速…

文件或目录损坏且无法读取:数据恢复的实战指南

在数字化时代&#xff0c;数据的重要性不言而喻。然而&#xff0c;在日常使用电脑、移动硬盘、U盘等存储设备时&#xff0c;我们难免会遇到“文件或目录损坏且无法读取”的提示。这一提示如同晴天霹雳&#xff0c;让无数用户心急如焚&#xff0c;尤其是当这些文件中存储着重要的…

leetcode数组-螺旋矩阵Ⅱ

题目 题目链接&#xff1a;https://leetcode.cn/problems/spiral-matrix-ii/ 给你一个正整数 n &#xff0c;生成一个包含 1 到 n2 所有元素&#xff0c;且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 输入&#xff1a;n 3 输出&#xff1a;[[1,2,3],[8,9,4],[7…

小刚说C语言刷题——第14讲 逻辑运算符

当我们需要将一个表达式取反&#xff0c;或者要判断两个表达式组成的大的表达式的结果时&#xff0c;要用到逻辑运算符。 1.逻辑运算符的分类 (1)逻辑非(!) &#xff01;a&#xff0c;当a为真时&#xff0c;&#xff01;a为假。当a为假时&#xff0c;&#xff01;a为真。 例…

WPS宏开发手册——Excel实战

目录 系列文章5、Excel实战使用for循环给10*10的表格填充行列之和使用for循环将10*10表格中的偶数值提取到另一个sheet页使用for循环给写一个99乘法表按市场成员名称分类&#xff08;即市场成员A、B、C...&#xff09;&#xff0c;统计月内不同时间段表1和表2的乘积之和&#x…

【Cursor】切换主题

右键顶部&#xff0c;把菜单栏勾上 首选项-主题-颜色主题 选择和喜欢的颜色主题即可&#xff0c;一般是“现代深色”

spring druid项目中监控sql执行情况

场景 在 Spring Boot 结合 MyBatis 的服务中&#xff0c;实现 SQL 执行覆盖情况的监控&#xff0c;可以基于Druid提供的内置的 SQL 监控统计功能。 开启监控 在 application.yml 中启用 Druid 的 stat 和 wall 过滤器&#xff0c;并配置监控页面的访问权限 …

Obsidian按下三个横线不能出现文档属性

解决方案: 需要在标题下方的一行, 按下 键盘数字0后面那个横线(英文横线), 然后回车就可以了 然后点击横线即可