
Linux
文章平均质量分 88
Linux
无空念
这个作者很懒,什么都没留下…
展开
-
Linux 子进程 -- fork函数
什么是子进程?子进程指的是由一个已经存在的进程(称为父进程或父进程)创建的进程.如: OS (操作系统) 就可以当作是一个进程, 用来管理软硬件资源, 当我点击浏览器, 想让浏览器运行起来时, 实际上是由 OS 接收指令, 然后 OS 帮我们将浏览器运行起来, 浏览器就是一个子进程, 是由 OS 创建出来的进程, 所以 OS 就是浏览器这个进程的父进程.( OS 并不是一个单独的进程, 是由多个进程和线程组成的复杂结构, 这里为了方便理解, 将整个 OS 当作是一个进程)原创 2024-11-26 16:52:15 · 1865 阅读 · 0 评论 -
Linux 下进程的状态
当我们这个程序运行起来之后, 就会在控制台中要我们输入数据, 如果我们一直不输入数据, 那么这个程序就不会向后执行. 这就是一种阻塞状态, 进程在一直在等待键盘的资源.此时, 操作系统更关心的是能否存活下去, 而不是效率, 如果操作系统直接宕机, 那么所有的进程都会直接结束, 哪还谈什么效率.我们知道创建子进程, 是为了去完成任务, 那么这个任务是否完成, 完成的结果如何等信息, 都应该要告诉父进程.所以, 操作系统就提供了一个 D 状态, 当进程处于 D 状态时, 操作系统就不会杀死这个进程.原创 2024-11-27 21:04:06 · 734 阅读 · 0 评论 -
Linux - 进程等待和进程替换
前面我们了解了如果父进程没有回收子进程, 那么当子进程接收后, 就会一直处于僵尸状态, 导致内存泄漏, 那么我们如何让父进程来回收子进程的资源.原创 2024-12-09 22:16:15 · 862 阅读 · 0 评论 -
Linux操作系统 , 进程基础, 了解PCB
进程就是运行起来的程序.程序又是什么, 我们写了一个 test.cpp 文件, 当我们编译之后会得到一个 .exe 文件, 这个文件就可以被称为程序.在我们运行这个程序之前, 这个程序是不会起作用的, 它就是一个文件, 是静态的.当我们将这个程序运行起来之后, 它就会有各种各样的功能提供给我们, 此时这个程序就被赋予了动态的属性, 此时它也就可以被称为是一个进程.进程和程序对比程序: 程序是静态的, 是一组指令和数据的集合, 存储在磁盘或其他存储介质上.原创 2024-11-25 20:46:21 · 875 阅读 · 0 评论 -
Linux 僵尸进程和孤儿进程, 进程优先级
之间在进程状态中了解到了 "僵尸状态".那么处于僵尸状态的进程就是僵尸进程."僵尸状态" 的本质就是死亡状态.如何理解僵尸进程:举个例子: 一个正常的人突然死亡了, 我们并不会直接将人送入火葬场, 而是要确认这个人的死亡原因.这个人的死因是什么, 自杀, 意外, 还是他杀. 我们需要进行调查. 进程也是如此, 当一个进程死亡后, 我们也需要知道, 进程的死因 (任务已完成, 程序出现错误 ...). 在原因未查明之前, 这个 "尸体" 会被保留. 此时就处于僵尸状态.创建一个进程就是为了完成任务, 现在原创 2024-11-29 17:13:44 · 644 阅读 · 0 评论 -
Linux - 虚拟地址空间
当我们使用 fork 函数时, 系统会以本进程为模板, 创建出一个子进程.当我们打印父子进程中的同名变量的地址时, 会出现奇怪的事.可以观察到 tmp 有两个值, 这个就是父子进程之间的写时拷贝. 实际上是两个变量, 只是在父子进程中名称相同.但是, 这两个变量的地址怎么会相同.一个地址怎么可能会有两个值?难道这两个进程中的 tmp 变量都存在了同一个地址中.这两个变量的确是存储在不同的地址中, 那么为什么这两个变量地址回相同.这就引出了虚拟地址空间的概念.原创 2024-12-11 19:31:26 · 1026 阅读 · 0 评论 -
Linux - 生产者消费者模型(信号量使用)
上面是生产者消费者?生产数据的一方称为生产者,将数据拿走用于处理的称为消费者.生产者将产生的数据放入一个固定的区域,而消费者只需要从这个固定区域取出数据即可这个存放数据的区域可以当作是超市.厂家生产出产品后,将产品送至超市.(厂家==生产者)我们(顾客),则是去到超市购买我们需要的产品.(顾客==消费者)那么生产者消费者模型有什么优点?原创 2025-01-20 15:55:37 · 728 阅读 · 0 评论 -
Linux - 信号的概念以及信号的产生
信号本质是一种通信机制, 用户或操作系统向进程发送信号, 通知进程发生了某个事, 让进程去进行处理最常见的信号: 当我们执行了一个前台程序后, 想要终止这个进程, 我们可以按 ctrl + c, 来终止这个进程. 其中 ctrl + c 就是通过向进程发送一个终止信号, 来告知这个进程, 不需要执行下去了.Linux下有哪些信号?使用: kill -l 命令来查看所有信号可以看到一共有 64 种信号. ctrl + c 发送的就是 2 号信号. 这个信号默认的操作是终止进程.原创 2024-12-25 08:33:44 · 917 阅读 · 0 评论 -
Linux 下信号的保存和处理
阻塞和忽略:阻塞是进程没有收到对应的信号, 所以没有任何处理.忽略接收到了信号, 但是对这个信号的处理就是不做任何处理, 进行忽视虽然两者的行为是一样的, 没有任何处理, 但是本质还是有差别的。原创 2025-01-10 21:22:34 · 749 阅读 · 0 评论 -
Linux - 五种常见I/O模型
I/O操作 (输入/输出操作, Input/Output) 是指计算机与外部设备就行数据交互的过程.什么是外部设备: 如键盘, 鼠标, 硬盘, 网卡等.原创 2025-01-23 17:44:41 · 797 阅读 · 0 评论 -
Linux - 线程池
什么是池?池化技术的核心就是"提前准备并重复利用资源". 减少资源创建和销毁的成本.那么线程池就是提前准备好一些线程, 当有任务来临时, 就可以直接交给这些线程运行, 当线程完成这些任务后, 并不会被销毁, 而是继续等待任务. 那么这些线程在程序运行过程中只需要创建一次. 相比当任务来临时创建线程, 当线程完成任务后销毁线程这种方法. 省去了很多线程创建销毁的成本.一次性创建多个线程, 那么就需要将这些线程集中管理起来, 将这先线程集中起来并进行管理, 这样的集合就时线程池.原创 2025-01-21 23:46:29 · 282 阅读 · 0 评论 -
Linux - 文件和重定向和软硬链接
open 函数, 打开一个文件.返回值: 返回一个文件标识符 fd, int 类型数据pathname: 想要打开的文件的路径flags: 打开文件的方式. (这是一个位图, 比特位为 1, 代表使用某个方式, 为 0 则不启用)打开文件的方式:O_RDONLY: 以只读的方式打开文件O_WRONLY: 以只写的方式打开文件O_RDWR: 以读写的方式打开文件O_CREAT: 如果想要打开的文件不存在, 则创建这个文件. mode 是新创建文件的权限。原创 2024-12-12 22:20:30 · 534 阅读 · 0 评论 -
Linux 进程间通信 - 匿名管道/命名管道
进程之间具有独立性. 其他的进程无法访问本进程的资源和内容.那如果想要让进程访问一些某个进程内的内容, 我们该怎么做?这时就需要通过进程间通信, 来完成两个进程之间的内容交互.管道就是用来完成进程间通信的一种方式.管道又分为匿名管道, 和命名管道.原创 2024-12-22 21:09:28 · 584 阅读 · 0 评论 -
Linux - 线程的同步与互斥操作
同步: 多个线程同时运行, 线程与线程之间可能存在某种关系, 需要让线程按照某种顺序进行执行.如: 线程 A 产生需要处理的数据 X, 而处理这个数据的任务交给了线程 B. 那么线程 A, B 之间的运行关系应该是, A 线程先运行, 在 A 产生了数据 X 之后, B 线程在运行进行处理互斥: 线程共享同一进程内的资源, 一个共享资源在被多个线程同时访问时, 就有可能会出现问题. 所以, 为了应对这种情况, 就需要让这些进程互斥的去访问这个共享资源.原创 2025-01-17 16:45:24 · 1020 阅读 · 0 评论 -
Linux - 什么是线程和线程的操作
什么是线程:线程(Thread)是操作系统能够进行运算调度的最小单位. 它被包含在进程之中, 是进程中的实际运作单位. 一个进程可以包含多个线程.进程 : 线程 == 1 : n (n >= 1).进程是系统分配资源的基本单位.线程则是系统调度的基本单位.在 Linux 中, 线程又被称为轻量级进程. 因为线程不必再进行空间的分配. 只需要对新创建的线程进行初始化 (创建线程的PCB即可).原创 2025-01-12 10:49:16 · 1019 阅读 · 0 评论