![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux
故渊~
这个作者很懒,什么都没留下…
展开
-
SSH配置免密登录 详解(踩坑无数总结)
之前在使用Ansible部署工具的时候,需要先配置好SSH免密登录,在配置时踩了很多的坑(按照很多文章的步骤并不能完全配置好免密登录),因此在踩完所有的坑之后,总结出来这篇文章。生成公钥、私钥对在中控机上,执行以下命令,然后一路回车即可。$ ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/home/work/.ssh/id_rsa): Enter passphrase (原创 2020-12-18 11:13:30 · 1102 阅读 · 0 评论 -
进程 详解及底层实现
1.进程概念进程是处于执行期的程序以及相关的资源的总称。线程是进程中活动的对象,内核的调度对象是线程。Linux下对线程和进程不作区分,线程是轻量级进程。进程在创建它的时刻开始存活。在Linux系统中,通常是调用 fork() 系统调用的结果,通过复制一个现有进程来创建一个全新的进程。fork系统调用从内核返回两次:一次回到父进程,另一次回到子进程。创建新的进程都是为了立即执行新的、...原创 2019-05-05 11:42:57 · 821 阅读 · 1 评论 -
僵尸进程 详解及代码实现
概念僵尸进程是一个比较特殊的状态。当子进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵尸进程。僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。只要子进程退出,父进程还在运行,但是父进程没有读取子进程状态,子进程进入僵尸状态。实现一个维持30秒的僵尸进程代码:/*这是一个30秒僵尸进程的示例代码 (严格来说,僵尸状态只能维持25秒)*/ #...原创 2019-05-05 20:23:38 · 882 阅读 · 0 评论 -
虚拟地址空间 及 页表 详解
虚拟地址空间进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存的地址。每个进程都有一个 32位或64位 的平坦地址空间,空间的大小取决于体系结构。(平坦指的是地址空间范围是一个独立的连续空间)一些操作系统提供了段地址空间,这种地址空间并非是一个独立的线性区域,而是被分段的,但现代 采用虚拟内存的操作系统通常都是用平坦地址空间。通常情况下,每个进程都有唯一的这种平坦地址空间。...原创 2019-05-06 13:24:03 · 6266 阅读 · 0 评论 -
用命名管道 fifo 实现 server&client 通信
命名管道匿名管道 pipe 应用的一个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。如果我们想在不相关的进程之间交换数据,可以使用FIFO文件来做这项工作,它经常被称为命名管道。命名管道是一种特殊类型的文件,它可见于文件系统。创建一个命名管道在命令行上创建,使用下面这个命令:$ mkfifo filename命名管道也可以从程序里创建,使用函数为int mk...原创 2019-05-07 14:17:24 · 619 阅读 · 0 评论 -
malloc / free 底层实现 详解
本文大致讲解一下linux下malloc的底层实现原理。首先malloc肯定是从堆中分配内存,而堆又在用户空间中占据什么位置?通过下面这张图可以看出来:很明显是32位系...转载 2019-07-30 13:16:21 · 1111 阅读 · 0 评论 -
进程地址空间 及 页表 详解
进程地址空间:系统中每个用户空间进程所看到的内存。Linux操作系统采用虚拟内存技术,系统中的所有进程之间以虚拟方式共享内存。地址空间进程地址空间由进程可寻址的虚拟内存组成,内核允许进程使用这种虚拟内存中的地址。每个进程都有一个32位或64位的平坦地址空间,空间大小取决于体系结构。(平坦指一段独立的连续区间)内存地址是一个给定的值,要在地址空间范围之内。尽管一个进程可以寻址4GB(2^...原创 2019-07-21 10:32:27 · 2271 阅读 · 0 评论 -
Linux 内核空间与用户空间
Linux 内核空间与用户空间 本文以 32 位系统为例介绍内核空间(kernel space)和用户空间(user space)。内核空间和用户空间对 32 位操作系统而言,它的寻址空间(虚拟地址空间,或叫线性地址空间)为 4G(2的32次方)。也就是说一个进程的最大地址空间为 4G。操作系统的核心是内核(kernel),它独立于普通的应用程序,可以...原创 2019-07-22 17:30:32 · 146 阅读 · 0 评论 -
进程创建 及 进程终结
1.进程创建Linux中进程创建由 fork() 和 exec() 函数族实现。fork() 通过拷贝当前进程创建一个子进程。子进程与父进程的区别仅仅在于PID(每个进程唯一)、PPID(父进程的进程号,子进程将其设置为被拷贝进程的PID)和某些资源和统计量。exec() 函数负责读取可执行文件并将其载入地址空间开始运行。#include <unistd.h>extern c...原创 2019-07-22 18:55:34 · 205 阅读 · 0 评论 -
单例模式--详解及代码实现
某些类, 只应该具有一个对象(实例), 就称之为单例.在很多服务器开发场景中, 经常需要让服务器加载很多的数据 (上百G) 到内存中. 此时往往要用一个单例的类来管理这些数据。懒汉模式和饿汉模式饿汉模式:吃完饭, 立刻洗碗, 这种就是饿汉方式. 因为下一顿吃的时候可以立刻拿着碗就能吃饭.懒汉模式:吃完饭, 先把碗放下, 然后下一顿饭用到这个碗了再洗碗, 就是懒汉方式.懒汉模式最核心的思想...原创 2019-04-09 17:46:57 · 297 阅读 · 0 评论 -
线程池---详解及代码实现
线程池一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。应用场景需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服...原创 2019-04-09 17:32:43 · 1135 阅读 · 0 评论 -
Linux中socket实现TCP网络程序
之前我们讲了用socket实现UDP网络程序,这篇博客我讲一下用socket实现TCP网络程序。首先让我们来看下面的图:原创 2018-09-25 13:06:52 · 405 阅读 · 0 评论 -
线程创建、线程终止、线程等待及线程分离
线程的概念1.什么是线程:是一个轻量级进程,一个进程内的一条执行流,也可以说是一个进程内的控制序列。 linux下PCB是线程 说的是linux操作系统,其他操作系统不是这样 linux对线程和进程不作区分,linux下的线程以进程PCB模拟 linux下的线程以进程PCB模拟,因此也叫轻量级进程(LWP) 一个进程中至少有一个线...原创 2018-09-14 21:36:29 · 788 阅读 · 0 评论 -
取消Linux下VIM的自动备份功能 Linux下文件名后面带有~ 解决方法
产生原因通过文本编辑器,如VIM打开文件,会生成一个相同文件名+波浪号的文件。这个带波浪号的文件是VIM的备份文件。解决办法**1.**删除方式可以通过以下命令删除目录下所有的这类备份文件:rm -fr .~2.永久解决方法1):取消vim自动备份的设置进入到vim的安装目录,一般为 /usr/share/vim/vim72如果有 .vimrc.vim 文件,查找到该文件...转载 2019-03-07 17:04:53 · 702 阅读 · 0 评论 -
线程同步:原子操作、锁、二元信号量、信号量、互斥量、临界区、读写锁、条件变量
原子操作共享数据(全局变量或堆变量)的自增(++)操作在多线程环境下会出现错误是因为这个操作(一条c语句)被编译为汇编代码后不止一条指令,因此在执行的时候可能执行了一半就被调度系统打断,去执行别的代码。我们把单指令的操作称为原子的(Atomic),因为无论如何,单条指令的执行是不会被打断的。为了避免出错,很多体系结构都提供了一些常...转载 2019-03-29 09:43:06 · 433 阅读 · 0 评论 -
信号量、互斥锁,读写锁和条件变量的区别
原文地址:信号量、互斥锁,读写锁和条件变量的区别 作者:qqrilxk信号量强调的是线程(或进程)间的同步:“信号量用在多线程多任务同步的,一个线程完成了某一个动作就通过信号量告诉别的线程,别的线程再进行某些动作(大家都在sem_wait的时候,就阻塞在那里)。当信号量为单值信号量是,也可以完成一个资源的互斥访...转载 2019-03-29 09:48:02 · 334 阅读 · 0 评论 -
多线程编程---死锁详解
死锁概念死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所占用的不会释放的资源而处于一种永久等待状态。死锁的四个条件互斥条件:一个资源每次只能被一个执行流使用。请求与保持条件:一个执行流因请求资源而阻塞时,对已获得的资源保持不释放。不剥夺条件:一个执行流已获得的资源,在未使用完之前,不可强行剥夺。循环等待条件:若干执行流之间形成一种头尾相接的循环等待资源的关系...原创 2019-04-08 16:53:06 · 1153 阅读 · 0 评论 -
生产者消费者模型---详解及代码实现
概念生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。321原则三种角色:生产者、消费者、仓库两种关...原创 2019-04-09 12:46:45 · 49286 阅读 · 11 评论 -
如何快速转载别人的博客 详解
一、在要转载的博客处右键点击检查/F12二、在Elements中寻找body标签,点击三角标,打开body标签三、在body中找div class=“container clearfix” id=“mainbox”,点击三角标,打开div标签四、在div标签中找到main,进而找到 class=“blog-content-box”五、在class=“blog-content-box...原创 2019-04-03 15:31:52 · 205 阅读 · 0 评论 -
Linux中用socket实现UDP网络程序
这篇博客的目的是想实现一个简单的UDP服务器程序,完成客户端与服务器端的通信。因为涉及的小知识点比较多,所以本篇博客的篇幅较长,但是会讲的很详细。1.程序的第一步是创建套接字(socket)#include&amp;amp;lt;sys/socket.h&amp;amp;gt; //头文件//创建套接字函数,socketint socket(int domain, int type, int protocol);//...原创 2018-09-24 11:21:24 · 3413 阅读 · 0 评论