![](https://img-blog.csdnimg.cn/direct/82134f0994624c929304e617016c9f79.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux
文章平均质量分 96
Linux
掘根
须知少时凌云志,曾许人间第一流
展开
-
【Linux】进程信号1——理解信号,产生信号
进程信号是 Linux 中用于进程间通信和控制的一种机制。当一个进程需要发送一个信号给另一个进程时,可以调用kill系统调用或向指定进程发送信号。当一个进程接收到一个信号时,操作系统会做出相应的处理,并将信号交给进程的信号处理函数处理信号是进程之间事件异步通知的一种方式,属于软中断。我们前面也简单的接触过信号,kill -l 就可以查看信号仔细观察可以发现这里不是 64 种信号,因为中间并不是连续的,一种有 62 种信号(其中,没有 32 和 33 信号)。其中,原创 2024-06-19 19:56:33 · 502 阅读 · 0 评论 -
【Linux】Linux常见的 31种信号
SIGKILL和SIGSTOP。SIGKILL和SIGSTOP。原创 2024-06-18 18:31:59 · 725 阅读 · 0 评论 -
【Linux】进程间通信4——system V消息队列,信号量
消息队列(Message Queuing)是一种比较特殊的通信方式,它不同于管道与共享内存那样借助一块空间进行数据读写消息队列实际上就是在系统当中创建了一个队列,队列当中的每个成员都是一个数据块,这些数据块都由类型和信息两部分构成,两个互相通信的进程通过某种方式看到同一个消息队列,这两个进程向对方发数据时,都在消息队列的队尾添加数据块,这两个进程获取数据块时,都在消息队列的队头取数据块。这个通信原理很类似管道,不过和管道不同的是,管道发送的是数据流,要人为判断数据边界,原创 2024-06-18 14:26:05 · 537 阅读 · 0 评论 -
【Linux】进程间通信3——system V共享内存
管道通信本质是基于文件的,也就是说操作系统并没有为此做过多的设计工作,但是不管怎么样,它们的本质都是一样的,都是在想尽办法让不同的进程看到同一份由操作系统提供的资源。其中,,虽然system V信号量和通信好像没有直接关系,但属于通信范畴。原创 2024-06-18 11:54:56 · 713 阅读 · 1 评论 -
【Linux】进程间通信2——命名管道
我们可以看到,我已经写了好多消息了,但是我们发现 myfifo 的大小一直都是 0 ,换句话说就是我写的消息已经被写到管道的缓冲区里了,但是 server端 并没有读取,所以写的消息还是在内存里,但是又因为 myfifo 的大小为 0 ,就说明数据并没有刷新到磁盘,也就意味着,双方通信依旧是在内存中通信的,和匿名管道的底层原理是一样的,它们采用的都是文件通信。运行程序前后两次查看myfifo管道文件的大小始终为0,说明了双方进程之间的通信依旧是在内存当中进行的,和匿名管道通信是一样的。原创 2024-06-17 10:58:38 · 642 阅读 · 0 评论 -
【Linux】进程间通信1——管道概念,匿名管道
③写端进程将数据写完后将写端关闭。原创 2024-06-16 17:55:37 · 1093 阅读 · 1 评论 -
【Linux】基础IO——库,动静态库的简易实现
注:我下面提供了多种解释,力求将库的概念讲清楚简单的来说,库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库是一些可重定向的二进制文件,这些文件在链接时可以与其他的可重定向的二进制文件一起链接形成可执行程序。我们在编写一个程序的时候,经常会遇到好多重复或常用的部分。原创 2024-06-15 22:52:28 · 1030 阅读 · 0 评论 -
【Linux】基础IO——理解文件系统
磁盘文件由两部分构成,分别是文件内容和文件属性。例如文件名、文件大小以及文件创建时间等信息都是文件属性,文件属性又被称为元信息ls -l,可显示当前目录下各文件的属性信息。也可以使用stat查看更多属性。原创 2024-06-15 11:21:46 · 1269 阅读 · 0 评论 -
【Linux】基础IO——文件描述符,重定向,FILE
因此,我们只要有某一文件的文件描述符,就可以找到与该文件相关的文件信息,进而对文件进行一系列输入输出操作。原创 2024-06-14 20:54:01 · 1174 阅读 · 22 评论 -
【Linux】基础IO——系统文件IO
而在open函数中使用特定的数字进行判断然后只写具体的功能。那第二个参数flags(int)是怎么实现模式的叠加的?为什么要把模式|在一起呢?这是一种用户层给内核传递标志位的常用做法。原创 2024-06-14 19:51:35 · 1160 阅读 · 27 评论 -
【Linux】进程控制3——进程程序替换
所谓进程程序替换,顾名思义,就是使用一个新的程序替换原有的程序,进程将执行新程序的代码,而不再执行原有程序的代码,前面我们已经学习了如何创建一个进程,一般情况下,进程程序替换都不会使用父进程直接进行进程程序替换,而是让父进程调用fork()函数创建一个子进程,让子进程去执行一个新的程序即可进程程序替换是指在运行过程中将一个进程的地址空间中的代码、数据和堆栈等内容完全替换为另一个程序的代码、数据和堆栈的过程。有人就说了上面那些函数,我怎么记得住他们的用法啊?原创 2024-06-13 19:21:12 · 1014 阅读 · 0 评论 -
【Linux】进程控制2——进程等待(wait&&waitpid)
看看运行结果有何变化?(请注意,虽然名字一样,这里的参数status并不同于wait唯一的参数——指向整数的指针status,而是那个指针所指向的整数,切记不要搞混了。当子进程退出后,会变成一个僵尸进程(短暂的存在不会造成什么影响),然后通过wait函数,进程状态从僵尸状态(Z)变成死亡状态(X)。,如果在使用fork()之前调用wait(),wait()的返回值则为-1,正常情况下wait()的返回值为子进程的PID.如果子进程没有退出,父进程必须阻塞等待,直到子进程变成Z,wait自动回收返回。原创 2024-06-12 20:48:24 · 938 阅读 · 1 评论 -
【Linux】进程控制1——进程创建和进程终止
在linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程为父进程。fork之前父进程独立执行,fork之后,父子两个执行流分别执行。注意,fork之后,谁先执行完全由调度器决定。1.将父进程的所有都到了子进程中。(若子进程不对父进程的数据进行修改的话,父子进程的数据也是共享的。若子进程对父进程的数据进行修改时,会发生写时拷贝,将父进程的数据进行一份到子进程中)写时拷贝 :(是一种延时申请技术,可以提高整机内存的使用率)2.原创 2024-06-11 11:35:02 · 1047 阅读 · 3 评论 -
【Linux】进程7——进程地址空间
之前提到了fork之后对父子进程返回不同的id值,给父进程返回子进程的pid,给子进程返回0,所以对于一个id如何存储两个值的说法,在我们之前已经提到过了一个概念叫做写时拷贝,就是在子进程要想修改父进程的id变量是,操作系统就会给子进程重新划分一块空间,将父进程的空间中的内容拷贝给子进程,再让子进程去修改id值,今天我们就从内存角度深度理解这个过程!原创 2024-06-10 12:43:31 · 1096 阅读 · 4 评论 -
【Linux】进程6——环境变量
环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数我们肯定看到过main函数的这种写法,这个main函数的参数我们将他叫做命令行参数。命令行参数有什么用呢? argc是我们命令行参数的个数,而argv是一个指针数组,他打印的就是我们在命令行输入的内容,下面代码我们可以测试一下 我们在命令行输入几个数后,打印出来就有几个。那命令行参数有什么用呢?可以通过不同的选项,让我们在同一个程序中执行他内部不同的功能。看代码:命令行参数是Linu原创 2024-06-09 15:42:29 · 1342 阅读 · 22 评论 -
【Linux】进程5——进程优先级
那是因为如果不加限制,如果恶意将自己的优先级调整的非常高,而给其余人的优先级调整的非常低(优先级较高的进程先享受CPU的资源),那些系统开启自启动的进程也就是正常系统进程很难再享受到CPU的资源,会变得卡顿。这样的情况叫做进程饥饿。任何的分时操作系统在调度上都要保证较为公平的调度。原创 2024-06-09 11:47:06 · 1296 阅读 · 25 评论 -
【Linux】进程4——进程状态
进程在载入内存的时候,通常操作系统会为该程序创建一个PCB结构体来维护该进程中的相关信息,那么当这一切的准备工作全部准备就绪的时候,这个PCB结构体就会被放入CPU相应的运行队列中,那么此时我们就称该进程已经处于运行态总结来说,原创 2024-06-08 18:52:26 · 1168 阅读 · 0 评论 -
【Linux】进程3——PID/PPID,fork函数
在讲父子进程之前,我们接着上面那篇继续讲。原创 2024-06-08 14:07:19 · 1070 阅读 · 0 评论 -
【Linux】进程2——进程task_struct
那在还没有学习进程之前,就问大家,操作系统是怎么管理进行进程管理的呢?很简单,先把进程描述起来,再把进程组织起来!我们拿大学为例子1.我们平时见得到校长吗?见不到——管理者和被管理者是不需要见面的2. 这个就引出一个新的问题,管理者在不见被管理者的情况下,如何做好的管理?管理的本质就是:通过对数据的管理,达到对人的管理3.管理者和被管理者面都不见,管理者怎么拿到被管理者的数据呢?4.拿老师和辅导员是不是管理者?他们更多的是执行者。原创 2024-06-07 20:45:59 · 1560 阅读 · 25 评论 -
【Linux】进程1——冯诺依曼体系,操作系统
冯·诺依曼体系结构是现代计算机设计的基础架构。冯·诺依曼体系结构,也被称为普林斯顿结构,由著名的美籍匈牙利数学家约翰·冯·诺依曼提出。这一理论框架不仅定义了计算机的基本操作原理,而且影响深远,至今仍是大多数计算机系统设计的基石。冯·诺依曼的设计思想主要集中在三个基本原则上:采用二进制逻辑、程序存储执行以及计算机由五个主要部分组成——运算器、控制器、存储器、输入设备和输出设备。这种体系结构的核心特点是程序存储,即指令和数据统一存放在同一个存储器中,并通过同一个处理器进行操作。原创 2024-06-06 22:13:43 · 1028 阅读 · 30 评论 -
【Linux】Linux工具——gdb
GDB是GNU开源组织发布的一个强大的UNIX下的程序调试工具。或许,各位比较喜欢那种图形界面方式的,像VC、BCB等IDE的调试,但如果你是在 UNIX平台下做软件,你会发现GDB这个调试工具有比VC、BCB的图形化调试器更强大的功能。所谓“寸有所长,尺有所短”就是这个道理。原创 2024-06-05 22:53:17 · 1201 阅读 · 0 评论 -
【Linux】Linux工具——git入门(三板斧)
所谓的版本控制器,就是可以让我们知道每一个文件的历史,以及它的发展过程的系统。记录工程的每一次改动和版本迭代的一个管理系统,也便于多人协同。版本控制器有很多,Git和SVN啊目前最主流的版本控制器是 Git(开源),Git可以控制电脑上所有格式的文件,例如excel,dwg等,对于我们而言,Git最重要的就是管理软件开发项目中的源码文件。所有版本控制系统,包括Git,只能跟踪文本文件的改动。原创 2024-06-04 21:29:18 · 824 阅读 · 0 评论 -
【Linux】Linux工具——make/Makefile
假如你是个在校大学生,快要到月底了,这时候你可能就要打电话给你爸要生活费了。你打电话给你爸爸,说 "爸,我是你儿子。",原创 2024-06-03 23:07:48 · 880 阅读 · 0 评论 -
【Linux】Linux工具——gcc/g++
甚至下面这种写法也可以。原创 2024-06-02 16:45:26 · 1034 阅读 · 27 评论 -
【Linux】Linux工具——yum,vim
在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 "App" 和 "应用商店" 这样的关系.原创 2024-06-01 15:49:26 · 1696 阅读 · 39 评论 -
【Linux】权限的概念
目录的可执行权限是表示你可否在目录下执行命令。如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读 权限所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。原创 2024-05-31 21:52:19 · 906 阅读 · 0 评论 -
【Linux】Linux基本指令3
时间戳是使用。原创 2024-05-30 17:06:05 · 1331 阅读 · 2 评论 -
【Linux】Linux基本指令2
未完待续……原创 2024-05-29 19:44:52 · 1398 阅读 · 0 评论 -
【Linux】Linux基本指令1
我们看看计算机的结构层次。原创 2024-05-28 20:31:53 · 1349 阅读 · 31 评论 -
【Linux】初识Linux和Linux环境配置
Linux,Linux Is Not UniX 的,一般指GNU/Linux,是一套免费使用和自由传播的类Unix操作系统,是一个遵循POSIX的多用户、多任务、支持多线程和多的操作系统。伴随着的发展,Linux得到了来自全世界软件爱好者、组织、公司的支持。它除了在方面保持着强劲的发展势头以外,在个人电脑、系统上都有着长足的进步。使用者不仅可以直观地获取该操作系统的实现机制,而且可以根据自身的需要来修改完善Linux,使其最大化地适应用户的需要。Linux不仅系统性能稳定,而且是。其核心。原创 2024-05-23 17:29:07 · 1845 阅读 · 1 评论