16 linux操作系统晋升
文章平均质量分 80
16 linux操作系统晋升
隨意的風
从事10+年的技术开发,结交天下软件研发朋友,共同探讨技术、共同进步。
展开
-
【genius_platform软件平台开发】第七十九讲:Linux系统中可执行程序后台运行的几种方式
当我们在做服务的时候,有时候在终端界面启动了,但是往往因为网络,关闭屏幕,执行CTRL+C等原因造成ssh断开造成正在运行程序退出,使得我们的服务程序也随即终止了。其背后的主要原因在于上述的相关操作,shell默认会发送。启动的程序,ctrl+c和关闭终端都无法关闭。在缺省情况下所有输出都被重定向到一个名为nohup.out的文件中。,因此当屏幕关闭,断网等造成ssh中断时进程不会退出。给该终端session关联的进程,从而导致。,为了弄清这个问题我们首先要了解。因此大多数情况同时使用。原创 2022-11-10 10:48:11 · 315 阅读 · 0 评论 -
多线程之:主线程、子线程
1、进程中线程之间的关系线程不像进程,一个进程中的线程之间是没有父子之分的,都是平级关系。即线程都是一样的, 退出了一个不会影响另外一个。但是所谓的"主线程"main,其入口代码是类似这样的方式调用main的:exit(main(...))。main执行完之后, 会调用exit()。exit() 会让整个进程over终止,那所有线程自然都会退出。2、主线程先退出,子线程继续运行的方法在进程主函数(main())中调用pthread_exit(),只会使主函数所在的线程(可以说是...原创 2020-08-29 15:31:47 · 3807 阅读 · 1 评论 -
std::thread 创建线程的几种方式
简介本文主要介绍标准C++中 thread的创建线程的几种方式。使用时需要加头文件:#include <thread>位于std命名空间中,是跨平台的线程操作使用说明1、通过函数指针创建一般来说,像CreateThread、_beginthread等创建线程时,都会先写一个含有一个参数(LPVOID lpParam)的全局函数,用于通过函数指针创建线程...原创 2020-03-25 11:48:28 · 1569 阅读 · 0 评论 -
Linux性能优化篇-了解CPU上下文切换
我们了解到导致平均负载,有可能是以下几种方面:CPU密集型(造成cpu利用率升高,可以理解) I/O密集型(io和cpu互斥的,也造成cpu利用率增高-不可中断进程的) 大量进程(???)根据平均负载的解释,单位时间内的处于可运行的进程和不可中断进程的进程数,System load averages is the average number of processe...原创 2020-03-20 16:18:21 · 773 阅读 · 0 评论 -
程序员的自我修养-线程详解
以下内容摘自《程序员的自我修养》什么是线程?线程(Thread),有时被称为轻量级(Lightweight Process, LWP),是程序执行流程的最小单元。一个标准的线程由线程ID、当前指令指针(PC)、寄存器集合和堆栈组成 。通常意义上,一个进程由一个到多个线程,各个线程之间共享程序的内存空间(包括代码段、数据段、堆等)及一些进程级的资源(如打开文件和信号)。一个经典的线程与进程的...原创 2020-03-20 16:13:30 · 211 阅读 · 0 评论 -
多线程问题解答
1、多线程有什么用?一个可能在很多人看来很扯淡的一个问题:我会用多线程就好了,还管它有什么用?在我看来,这个回答更扯淡。所谓"知其然知其所以然","会用"只是"知其然","为什么用"才是"知其所以然",只有达到"知其然知其所以然"的程度才可以说是把一个知识点运用自如。OK,下面说说我对这个问题的看法:(1)发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务...原创 2020-03-20 16:12:39 · 192 阅读 · 0 评论 -
Linux下提供了多种方式来处理线程同步,最常用的是互斥锁、条件变量和信号量
条件变量与互斥锁、信号量的区别 1.互斥锁必须总是由给它上锁的线程解锁,信号量的挂出即不必由执行过它的等待操作的同一进程执行。一个线程可以等待某个给定信号灯,而另一个线程可以挂出该信号灯。 2.互斥锁要么锁住,要么被解开(二值状态,类型二值信号量)。 3.由于信号量有一个与之关联的状态(它的计数值),信号量挂出操作总是被记住。然而当向一个条件变量发送...原创 2018-08-30 09:17:17 · 277 阅读 · 0 评论 -
进程间8种通信方式详解******************
进程间的几种通信方式的比较和线程间的几种通信方式-8种百度经验有介绍8种1、无名管道(pipe):半双工的通信方式,单向流动,血缘关系(父子进程关系)的进程间使用。2、高级管道(popen):将另一个程序当做一个新的进程在当前程序进程中启动,则它算是当前程序的子进程3、有名管道(nemed pipe):半双工的通信方式,但是它允许无亲缘关系进程间通信。4、消息队列(messag...原创 2018-08-30 09:16:50 · 823 阅读 · 0 评论 -
多个进程监听同一个端口(multiple processes listen on same port)
单个进程监听多个端口单个进程创建多个 socket 绑定不同的端口,TCP, UDP 都行 方式1:通过 fork 创建子进程的方式可以实现,其他情况下不行。当连接到来时,子进程、父进程都可以 accept, 这就是著名的“惊群”问题(thundering herd problem)。NGINX 的 master/work 处理方法:Flow of an NGINX wor...原创 2018-08-30 09:18:35 · 2798 阅读 · 0 评论 -
共享内存映射之mmap()函数详解
共享内存映射之mmap()函数详解 共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式,因为进程可以直接读写内存,而不需要任何数据的拷贝。对于像管道和消息队列等通信方式,则需要在内核和用户空间进行四次的数据拷贝,而共享内存则只拷贝两次数据: 一次从输入文件到共享内存区,另一次从共享内存区到输出文件。实际上,进程之间在共享内存时,并不总是读写少量数据后就解除映射,有新的通信时,再重...原创 2018-07-21 17:12:44 · 4953 阅读 · 0 评论 -
Linux进程间通信--信号,管道,消息队列,信号量,共享内存,socket
linux下的进程通信手段基本上是从Unix平台上的进程通信手段继承而来的。而对Unix发展做出重大贡献的两大主力AT&T的贝尔实验室及BSD(加州大学伯克利分校的伯克利软件发布中心)在进程间通信方面的侧重点有所不同。前者对Unix早期的进程间通信手段进行了系统的改进和扩充,形成了“system V IPC”,通信进程局限在单个计算机内;后者则跳过了该限制,形成了基于套接口(socket)...原创 2018-07-19 15:42:37 · 820 阅读 · 0 评论 -
进程间通信方式——4、共享内存(shm)
1.什么是共享内存?共享内存就是允许两个或多个进程共享一定的存储区。就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针。当一个进程改变了这块地址中的内容的时候,其它进程都会察觉到这个更改。因为数据不需要在客户机和服务器端之间复制,数据直接写到内存,不用若干次数据拷贝,所以这是最快的一种IPC。注:共享内存没有任何的同步与互斥机制,所以要使用信号量来实现对共享内存的存...原创 2018-04-17 14:10:11 · 1582 阅读 · 0 评论 -
进程间通信方式———3、信号量(Semaphore)
1.信号量信号量本质上是一个计数器(不设置全局变量是因为进程间是相互独立的,而这不一定能看到,看到也不能保证++引用计数为原子操作),用于多进程对共享数据对象的读取,它和管道有所不同,它不以传送数据为主要目的,它主要是用来保护共享资源(信号量也属于临界资源),使得资源在一个时刻只有一个进程独享。2.信号量的工作原理由于信号量只能进行两种操作等待和发送信号,即P(sv)和V(sv),他们...原创 2018-04-17 14:08:34 · 531 阅读 · 0 评论 -
进程间通信方式——2、消息队列(msg_queue)
1.消息队列消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。 标识符是IPC对象的内部名, 而它的外部名则是key(键), 它的基本类型是key_t, 在头文件<sys/types.h>中定义为长整型.。键由内核变换成标识符。 用户可以从消息队列中读取数据和添加消息,其中发送进程添加消息到队列的末尾,接收进程在队列的头部接收消息,消息一旦被接收,就会从队列中删除。...原创 2018-04-17 14:06:57 · 1387 阅读 · 0 评论 -
进程间的通信方式——1、管道(pipe)
1.进程间通信 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程A把数据从用户空间拷到内核缓冲区,进程B再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信。1 2不同进程间的通信本质:进程之间可以看到一份公共资源;而提供这份资源的形式或者提供者不同,造成了通信方式不同,而...原创 2018-04-17 14:04:03 · 325 阅读 · 1 评论 -
进程间的通信方式——pipe(1、管道)
本章内容采用pipe管道如何进行进程之间的通信 pipe管道进程通信的规则和限制 Linux中pipe管道的实现机制和管理pipe管道的结构体什么是进程通信进程通信就是两个进程之间进行数据交换,在Linux中有好几种可以进行进程通信的方式,在这篇文章中我们主要介绍最基本的进程通信方式——pipe管道。进程通信的途径进程之间交换信息的唯一途径就是传送打开的文件。管道(pip...原创 2018-04-17 13:52:14 · 851 阅读 · 0 评论 -
在线UML Class Diagram 类图工具
在线Visual Paradigm- UML编辑器使用在线UML编辑器轻松绘制UML图,其中包含功能强大的UML编辑工具,即时UML语法检查和整洁的用户界面。Visual Paradigm在线UML 图,如类,用例,序列,活动,部署,组件,状态机和包图。(一键即时打开使用)什么是UML中的类图?类图通过显示该系统中的类和类之间的关系来描述面向对象系统的结构。类图也显示了约束和类的属性...原创 2020-03-04 12:17:53 · 1590 阅读 · 1 评论 -
浅析libusb控制接口***
浅析libusb控制接口和mountd守护进程处理uevent切换usb设备的实现1. UMS mode (USB Mass-Storage mode) [ums]2. 从usb_gadget_register_driver的实现来看,insmod xxx.ko,然后重新插拔一下usb cable,那么pc再次枚举到的设备就是insmod xxx.ko对应的设备了[luther...原创 2019-12-27 14:46:27 · 2621 阅读 · 0 评论 -
USB详解
usb作为一种串行接口,应用日益广泛。如同每个工程设计人员必须掌握I2C,RS232这些接口一样,我们也必须掌握usb.但是usb的接口协议实在有点费解,linux uhci驱动作者之一Alan Stern曾经就说过“The USB documentation is downright evil. Most of it is just crap, written by a committ...原创 2019-12-19 20:57:33 · 335 阅读 · 0 评论 -
fcntl函数之 F_SETFL、F_GETFL的使用(设置文件的flags)
1、获取文件的flags,即open函数的第二个参数: flags = fcntl(fd,F_GETFL,0);2、设置文件的flags:fcntl(fd,F_SETFL,flags);3、增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞: flags = fcntl(fd,F_GETFL,0); flags |= O_NONBLOCK;fcntl(fd,F_SETFL,flags);4、取消文件的某个fl...原创 2020-11-24 12:12:24 · 4076 阅读 · 0 评论 -
linux编程之:条件变量std::condition_variable、wait() 、notify_one()、notify_all()
(1)条件变量std::condition_variable、wait() 、notify_one()、notify_all()wait()用来等一个东西 1、如果第二个参数返回值是true,那么这一行就继续往下运行。 2、如果第二个参数返回值是false那么wait将解锁互斥量,并堵塞在这一行 堵到什么时候呢?堵到其他函数调用notify_one()函数为止。如果wait没有第二个参数,那么第二个参数返回false效果一样。...原创 2020-11-11 15:19:26 · 901 阅读 · 0 评论 -
Linux多线程之pthread_setschedparam
pthread_setschedparam 设置线程的权限int pthread_setschedparam(pthread_t target_thread, int policy, const struct sched_param *param)参数 1. target_thread是使用pthread_create所获得的线程ID。 2.线程的调度有三种策略:SCHED_OTHER、SCHED_RR和SCHED_FIFO。Policy用于指明使用哪种策略。下面我们简单的说明一下这三种调...原创 2020-08-14 14:53:27 · 2834 阅读 · 0 评论 -
嵌入式外设之DMA
目录DMA简介【整理】以快递为例来说明DMA的功能DMA本意解析为何会出现DMA?DMA使用示例DMA vs 快递关于DMA是需要硬件支持的总结DMA简介DMA不是独立的某个外设,而是一个硬件模块支持DMA的功能一般对应的,也是按个数来的,对应的叫做多少个通道channel。【整理】以快递为例来说明DMA的功能DMA本意解析...原创 2020-02-11 11:24:12 · 613 阅读 · 0 评论 -
【第十三讲】TMS320F28335开发板之DMA模块
直接存储器访问(DMA)模块一、内存与外设进行数据交换的方式:中断方式:每传输一次数据,就必须经历中断处理的全部步骤,而且一般需要借助CPU内部的寄存器作为中介,也就是说CPU需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方,在这个时间中,CPU对于其他的工作来说就无法使用。 DMA模式:不用CPU的寄存器作为传输中介,完成存储器和外设间、存储器和存储器...原创 2020-02-11 11:12:34 · 6526 阅读 · 1 评论 -
Arm linux dma mapping操作
概述由于处理器存在cache,cache和内存中数据可能不一致,所以驱动在使用dma在内存和device之间搬移数据前后需要cpu对cache和内存中数据进行同步。有些dma寻址能力有限,比如只能寻址内存低128m,但数据在内存的1G地址处,这时需要进行数据转移。基本概念cpu读取数据时先查询l1 cache,如果没有再向l2 cache查询,如果没有在向内存查询,然后把数据从ddr...原创 2020-02-11 10:39:15 · 559 阅读 · 0 评论 -
Linux 多线程 - 线程异步-【互斥锁(mutex)、条件变量(cond)、读写锁(rwlock)】与同步机制-【信号(signal)】
同步机制:互斥锁(mutex)、条件变量(cond)、读写锁(rwlock)异步机制 - 信号(signal) I. 同步机制线程间的同步机制主要包括三个:互斥锁: 以排他的方式,防止共享资源被并发访问; 互斥锁为二元变量, 状态为0-开锁、1-上锁; 开锁必须由上锁的线程执行,不受其它线程干扰. 条件变量: 满足某个特定条件时,可通过条件变量通知其它线程do-so...原创 2018-08-30 09:16:59 · 629 阅读 · 0 评论 -
linux之dlopen、dlsym和dlclose使用和举例
之前用过这三个函数一直没时间整理一下。今天抽时间整理一下。1、函数简介dlopen基本定义功能:打开一个动态链接库 包含头文件: #include <dlfcn.h> 函数定义: void * dlopen( const char * pathname, int mode ); 函数描述: 在dlopen的()函数以指定模式打开指定...原创 2020-01-16 14:49:50 · 1670 阅读 · 0 评论 -
EINTR中断产生错误
1、介绍慢系统调用该术语适用于那些可能永远阻塞的系统调用。永远阻塞的系统调用是指调用永远无法返回,多数网络支持函数都属于这一类。如:若没有客户连接到服务器上,那么服务器的accept调用就会一直阻塞。慢系统调用可以被永久阻塞,包括以下几个类别:(1)读写‘慢’设备(包括pipe,终端设备,网络连接等)。读时,数据不存在,需要等待;写时,缓冲区满或其他原因,需要等待。读写磁盘文件一般不会阻塞...原创 2019-12-26 21:13:32 · 161 阅读 · 0 评论 -
VMware Tools (ubuntu系统)安装详细过程与使用-虚拟机与主机可以通过“拖拽”来对传文件
前一段时间博主在VMware虚拟机上安装了Ubuntu系统,如果还没有安装的同学可以参考博主上一篇文章:VMware Ubuntu安装详细过程。猿友们都知道linux不太好用,如果你想将你主机Windows上的文件或安装包放到虚拟机上,VMware Tools是必不可少的工具。欢迎关注,相互学习讨论,后续还会有更多linux搭建java开发环境和框架相关博客。下面小宝鸽附上VMware Tools...原创 2018-06-15 13:51:27 · 1867 阅读 · 1 评论 -
在linux中使用内存映射(mmap)操作文件
在使用内存映射操作文件之前,我们先按照常规的方式来读写文件,这种方式操作如下:1,打开或创建文件,得到文件描述符,2,将内存中的数据以一定的格式和顺序写入文件,或者将文件中的数据以一定的格式和顺序读入到内存;3,关闭文件描述符;下边是按照常规方式操作固定格式的文件的方法,包含读写两个示例;#include <stdlib.h>#include <stdio.h>#inclu...原创 2018-06-29 14:38:04 · 6966 阅读 · 0 评论 -
linux sort 命令详解
sort是在Linux里非常常用的一个命令,管排序的,集中精力,五分钟搞定sort,现在开始!1 sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。[rocrocket@rocrocket programming]$ cat seq.txtbananaapplepearoran...原创 2018-07-27 16:00:20 · 1109 阅读 · 1 评论 -
几个网络命令(ping,telnet,ssh,netstat)
1、pingping命令工作在OSI参考模型的第三层-网络层。ping命令会发送一个数据包到目的主机,然后等待从目的主机接收回复数据包,当目的主机接收到这个数据包时,为源主机发送回复数据包,这个测试命令可以帮助网络管理者测试到达目的主机的网络是否连接。ping无法检查系统端口是否开放。2、telnetTelnet是位于OSI模型的第7层---应用层上的一种协议,是一个通过创建虚拟终端提供连...原创 2018-08-30 09:18:52 · 911 阅读 · 1 评论 -
Linux 内核并发无锁环形队列kfifo的原理和实现
前面在《Linux内核数据结构kfifo详解》一文中详细解析了 Linux 内核并发无锁环形队列kfifo的原理和实现,kfifo鬼斧神工,博大精深,让人叹为观止,但遗憾的是kfifo为内核提供服务,并未开放出来。剑不试则利钝暗,弓不试则劲挠诬,鹰不试则巧拙惑,马不试则良驽疑,光说不练是不能学到精髓的,下面就动手实现自己的并发无锁队列UnlockQueue(单生产者单消费者)。一、Unloc...原创 2018-11-02 22:20:12 · 3567 阅读 · 0 评论 -
巧夺天工的kfifo
本文已有修订版本:《巧夺天工的kfifo(修订版)》,欢迎前往阅读。 Linux kernel里面从来就不缺少简洁,优雅和高效的代码,只是我们缺少发现和品味的眼光。在Linux kernel里面,简洁并不表示代码使用神出鬼没的超然技巧,相反,它使用的不过是大家非常熟悉的基础数据结构,但是kernel开发者能从基础的数据结构中,提炼出优美的特性。kfifo就是这样的一类优美代码,它十分简...原创 2018-11-02 22:22:14 · 288 阅读 · 0 评论 -
GameServer工程SentOS系统编译
问题汇总1、cmake 报错[root@iz build]# cmake ..-- The C compiler identification is GNU 4.8.5-- The CXX compiler identification is GNU 4.8.5-- Check for working C compiler: /usr/bin/cc-- Check for wor...原创 2019-03-14 14:25:42 · 530 阅读 · 0 评论 -
CentOs下安装gcc/g++/gdb
Centos支持使用yum安装,安装软件一般格式为yum install .......,注意安装时要先成为root用户,且在联网的状态下。使用yum安装gcc:yum install gcc即可。使用:which gcc查看是否安装成功使用yum安装g++:yum install gcc-c++ 即可。使用:which g++ 查看是否安装成功...原创 2019-03-14 14:44:31 · 447 阅读 · 0 评论 -
linux内核的调度机制
linux内核的调度机制抢占式内核与非抢占式内核linux抢占式内核与实时系统的关系一个好的系统的进程调度机制,要兼顾三种不同的应用的需求:1交互式应用。这种应用,着重于系统的响应速度,当系统中有大量的进程共存时(多用户),要保证每个用户都有可以接受的响应速度,而不感到明显的延迟。当延迟超过150毫秒时,使用者会明显地感觉到。2.批处理应用。批处理的应用往往都是“后台作...原创 2019-09-11 10:41:01 · 273 阅读 · 0 评论 -
浅谈网络I/O多路复用模型 select & poll & epoll
我们首先需要知道select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的。select的基本用法:http://blog.csdn.转载 2018-01-22 17:15:48 · 290 阅读 · 0 评论