
linux操作系统:进程管理
linux操作系统:进程管理 文集
z_stand
远离颠倒梦想,究竟涅槃
展开
-
Linux创建线程时 内存分配的那些事
文章目录问题描述问题分析针对问题1 的猜测:针对问题2 的猜测:原理追踪总结问题描述事情开始于一段内存问题,通过gperf工具抓取进程运行过程中的内存占用情况。分析结果时发现一个有趣的事情,top看到的实际物理内存只有几兆,但是pprof统计的内存信息缺达到了几个G。很明显是创建线程时产生的内存分配,且最终的分配函数是__pthread_create_2_1,这是当前版本glibc创建线程时的实现函数,且在该函数内进行线程空间的分配。查看进程代码,发现确实有大量的线程创建,我们知道线程是有自己独原创 2020-05-30 21:23:45 · 3352 阅读 · 0 评论 -
Linux进程管理: 多进程编程
多进程编程mind-Mapping保存有xmind原始文件,可直接获取无名管道PIPE命名管道FIFOPOSIX共享内存POSIX消息队列POSIX信号量SYS V共享内存SYS V消息队列SYS V信号量...原创 2020-01-16 21:10:56 · 208 阅读 · 0 评论 -
Linux进程管理:进程状态和CPU平均负载
常见的linux进程状态如下:关于源文件xmid,可以从Mind-Mapping获取这里借助进程状态来描述一下linux系统中的平均负载的概念当我们感觉到系统变慢时,通常通过top和uptime命令来了解系统的负载情况[root@pub-ncpu-ndb0 ~]# uptime 21:06:13 up 8 days, 7:05, 5 users, load average: 16...原创 2020-01-11 21:16:47 · 377 阅读 · 0 评论 -
linux系统目录树/内核源码目录树
关于系统目录树和源码目录树的结构图如下系统:centos 7.0内核版本:3.10.0-957-5.1.e17原创 2019-11-19 13:15:54 · 671 阅读 · 0 评论 -
linux进程间通信:system V 共享内存
文章目录通信原理优势运行流程编程接口编程实例通信原理多个进程共享物理内存的同一块区域(通常称之为“段”:segment)抛弃了内核态消息转存处理的过程,让两个进程直接通过一块内存进行通信我们普通的像PIPE,FIFO,消息队列等的通信方式如下图:这种方式的通信不论读写,都需要内核态(系统调用 read,write,pipe,mkfifo,msgget,msgsnd,msgrcv等)...原创 2019-09-28 11:15:25 · 482 阅读 · 0 评论 -
linux进程间通信:system V 信号量
概念描述英文:semaphore 简称SEM,主要用来进行进程间同步本质:内核维护的一个正整数,可对其进行各种+/-操作分类:systemV 信号量、POSIX 有名信号量、POSIX 无名信号量用途:用来标示系统中可用资源的的个数,协调各个进程有序的访问资源,防止发生冲突P操作:程序在进入临界区之前要对资源进行申请V操作:程序离开临界区后要释放相应的资源通信原理类似于房卡,...原创 2019-09-28 22:29:34 · 371 阅读 · 0 评论 -
linux进程间通信:system V 信号量和共享内存实现进程间同步
关于信号量和共享内存的相关描述已经在前几篇提到过;信号量:即内核维护的一个正整数,可以使用内核提供的p/v接口进行该正整数的+/-操作,它主要用来表示系统中可用资源的个数,协调各个进程有序访问资源,防止发生冲突共享内存:操作系统从运行中的进程拥有的3G用户空间中提供一段用户态可以直接访问的内存块,并且该内存区域可以被其他进程共享信号量在共享内存中的使用基本流程:以下代码通过信号量实现了...原创 2019-09-30 09:15:10 · 581 阅读 · 6 评论 -
linux进程间通信:system V 信号量 生产者和消费者模型编程案例
生产者和消费者模型:有若干个缓冲区,生产者不断向里填数据,消费者不断从中取数据两者不冲突的前提:缓冲区有若干个,且是固定大小,生产者和消费者各有若干个生产者向缓冲区中填数据前需要判断缓冲区是否满,满了则等待,直到有空间消费者从缓冲区中取数据前需要判断缓冲区是否为空,空了则等待,直到缓冲区有数据在某一时刻,缓冲区中只允许有一个操作者进行读或者写操作通过信号量,则可以将以上提出...原创 2019-10-03 12:40:24 · 766 阅读 · 1 评论 -
linux进程间通信:POSIX 消息队列
文章目录基本介绍相关编程接口编程实例基本介绍关于消息队列的基本介绍,前面在学习system V的消息队列时已经有过了解,linux进程间通信:system V消息队列支持不同进程之间以消息(messages)的形式进行数据交换,消息能够拥有自己的标识,且内核使用链表方式进行消息管理。进程之间的通信角色为:发送者和接受者发送者:a. 获取消息队列的ID(key或者msgid)b. 将...原创 2019-10-03 15:56:11 · 595 阅读 · 0 评论 -
linux进程间通信:POSIX 消息队列 ----异步通信
在上一篇中linux进程间通信:POSIX 消息队列我们直到消息队列在消息数目达到了队列所能承载的上限,就会发生消息的发送阻塞。阻塞式的通信影响系统效率,进程之间在通信收到阻塞时并不能去做其他事情,而是一直处于阻塞状态。为了避免出现这样的低效问题,POSIX消息队列推出如下接口实现异步通信机制函数头文件#include <mqueue.h>函数使用:int mq_notify...原创 2019-10-03 19:54:52 · 1140 阅读 · 2 评论 -
linux进程间通信:POSIX信号量
概念描述英文:semaphore 简称SEM,主要用来进行进程间同步本质:内核维护的一个正整数,可对其进行各种+/-操作分类:systemV 信号量、POSIX 有名信号量、POSIX 无名信号量用途:用来标示系统中可用资源的的个数,协调各个进程有序的访问资源,防止发生冲突P操作:程序在进入临界区之前要对资源进行申请,对资源的引用计数要-1,当资源个数为0时进程p操作会发生阻塞V操作...原创 2019-10-04 14:45:48 · 488 阅读 · 0 评论 -
linux进程间通信:POSIX 共享内存
直接学习过sysemV 的共享内存的实现及使用原理,参考[]POSIX 同样提供共享内存的接口,基本原理和system V的共享内存是一样的。通信原理多个进程共享物理内存的同一块区域(通常称之为“段”:segment)抛弃了内核态消息转存处理的过程,让两个进程直接通过一块内存进行通信我们普通的像PIPE,FIFO,消息队列等的通信方式如下图:这种方式的通信不论读写,都需要内核态(...原创 2019-10-04 17:10:51 · 932 阅读 · 0 评论 -
linux进程间通信:消息队列实现双端通信
双端通信描述利用消息队列针对发送接受消息的类型唯一性 进行多个客户端之间消息传递,而不需要server端进行消息转发。同时消息队列的读阻塞和写阻塞特性(消息队列中已经写入数据,如果再不读出来,则无法再次写入)让消息队列的实现过程只能如下:客户端1的父进程用来处理类型1的消息写,子进程处理类型2的消息读客户端2的父进程处理类型2的消息写,子进程处理类型1的消息读实现客户端1 clie...原创 2019-09-27 08:55:09 · 562 阅读 · 0 评论 -
linux进程间通信:system V消息队列
基本介绍支持不同进程之间以消息(messages)的形式进行数据交换,消息能够拥有自己的标识,且内核使用链表方式进行消息管理。进程之间的通信角色为:发送者和接受者发送者:a. 获取消息队列的ID(key或者msgid)b. 将数据放入一个带有标识的消息结构体,发送到消息队列接受者:a. 获取消息队列的IDb. 指定标识的消息从消息队列中读出,然后进一步后续处理支持不同的进程标记...原创 2019-09-26 13:14:37 · 365 阅读 · 0 评论 -
linux进程间通信:IPC对象 概念介绍(扫盲)
什么是IPC对象IPC:inter-process communication,进程间通信对象;包括如下组件:管道通信 :FIFO,PIPE,流式数据消息队列:message queue信号量:semaphore共享内存:share memory…IPC分类System V IPC当前系统调用版本主要是类unix和linux操作系统之中包含,它是在linux操作系统出现之前发...原创 2019-09-25 19:53:30 · 3769 阅读 · 0 评论 -
使用sigaction处理内核信号
文章目录函数描述函数使用抓取发送信号的进程信息mark一次获取内核信号,并作相应处理的手段linux内核中断机制的一个重要实现就是信号。信号使得内核和用户态的交互更加便捷,这个便捷对开发者来说可以更好的利用系统原生内核来处理信息。《深入理解unix内核》中对信号作用的描述如下:让进程知道已经发生了一个特定事件强迫进程执行它自己代码中的信号处理程序这里主要描述一下借用sigactio...原创 2019-07-13 19:51:45 · 511 阅读 · 0 评论 -
linux系统 长久记录所有用户所有操作记录
在linux系统中想要记录所有登录过当前系统的用户操作,排查有人对当前系统做的何种操作导致系统问题,可以按照如下方法进行。前言在描述操作步骤之前,先说一下系统环境变量的相关配置文件~/.bashrc和~/.bash_file,这两个文件是当前用户shell下生效的环境变量配置文件。修改完成之后需要source 一下对应的配置/etc/profile和/etc/bashsrc是全局变量。修...原创 2019-08-01 23:24:22 · 965 阅读 · 0 评论 -
ubuntu18.04.1内核升级至5.0.0-25版本
ubuntu18.04操作系统版本先已支持在线的内核版本升级,到目前为止18.04发布版已经拥有三个小版本了1,2,3。 其中18.04.01和18.04.03版本,安装好之后默认的是4.15内核版本,但是默认支持在线安装4.18和5.0.0内核版本。具体升级步骤如下:升级前备份当前系统镜像确认外网可用,同时配置好任意一个国内源(这里用的是网易源)获取5.0.0内核版本 sudo apt...原创 2019-08-27 22:23:03 · 5404 阅读 · 0 评论 -
linux 进程内存分布及 堆分配和栈分配的特点
文章目录进程内存空间分布size命令查看内存分布堆方式内存分配和栈方式内存分配比较进程内存空间分布一个程序的内存空间主要如下:代码段(text segment):只读权限;常是指用来存放程序执行代码的一块内存区域,这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。数...原创 2019-08-31 18:19:17 · 2087 阅读 · 0 评论 -
linux进程间通信:无名管道 pipe
文章目录内核层实现结构通信原理特点使用函数声明使用实例单向通信双向通信编程注意事项管道中无数据时读操作会阻塞将管道的写端句柄关闭,不会影响读端数据读取管道中没有数据,写操作关闭则读操作会立即返回管道大小测试 64K管道发生写满阻塞,一旦有4k空间,写继续总结内核层实现结构Linux操作系统中的无名管道结构如下图:管道在内核中的实现即如一个缓冲区,内核提供将该缓冲区以一个文件句柄的形式...原创 2019-09-01 23:31:05 · 586 阅读 · 0 评论 -
linux进程间通信:shell管道 "|" 的实现
linux terminal输入如下命令,其中"|"符号即为我们上文中所说的无名管道介绍正如我们上文中所描述的"|“无名管道提供了具有亲缘关系的进程之间的通信,它由于直接使用系统调用,运行效率较高。则linux系统下可以大批量的使用”|"来提供命令直接输入输出的重定向。具体shell中管道的实现可以参考如下图:当我们直接执行lsmod时,此时进程文件描述符默认会打开标准输入,标准输出,...原创 2019-09-05 23:00:42 · 2296 阅读 · 3 评论 -
linux进程间通信:popen函数通过管道与shell通信
函数描述原创 2019-09-11 14:24:10 · 1046 阅读 · 0 评论 -
linux进程通信:pipe实现进程同步
文章目录通过管道同步进程实现代码管道缓冲区设置缓冲区大小总结 :pipe的特点通过管道同步进程管道自带同步互斥机制:管道的内核实现:fs/pipe.c ,主要通过内核的锁以及等待队列等机制实现管道的write操作会阻塞进程当内存缓冲区已满或被读进程锁定,会阻塞write操作当所有数据被写入管道时write操作才会结束管道的read操作会阻塞进程当读进程被阻塞时会形成...原创 2019-09-13 18:32:42 · 1480 阅读 · 0 评论 -
linux进程间通信:命名管道FIFO
文章目录FIFO 通信特点系统调用接口应用拥有亲缘关系之间的进程通信非亲缘关系进程之间的通信总结FIFO 通信特点FIFO文件有文件名可以像普通文件一样存储在文件系统之中可以像普通文件一样使用open/write读写和pipe文件一样属于流式文件,不能使用lseek系统调用重定位文件偏移地址具有写入原子性,支持多个进程同时对FIFO进行写操作,如日志系统/var/logFir...原创 2019-09-20 18:06:23 · 461 阅读 · 0 评论 -
linux进程间通信:FIFO应用 /var/log/ 系统日志的模拟实现
在类unix操作系统下存在这样一个目录/var/log/,主要是记录操作系统相关的系统各个进程服务的日志信息该日志系统的特性如下:支持多进程并发写入同一文件不同进程日志信息可以写入不同文件支持使用head/tail/grep/cat/vi 等命令进行日志操作我们可以利用mkfifo的原子特性来实现一个类似的日志系统,基本结构如下写入fifo的进程代码如下:/*********...原创 2019-09-24 16:43:31 · 598 阅读 · 0 评论 -
linux进程间通信:FIFO实现进程间的双向通信
fifo的双向通信的方式如下图:两个进程间的通信需要两个命名管道,分别处理一个进程的读和写导致这种通信方式出现的根因还是由于fifo的阻塞读和阻塞写,所以这里需要使用两个管道对读写进行分别处理。SERVER端代码如下:/************************************************************************* > File ...原创 2019-09-25 11:44:28 · 1974 阅读 · 0 评论 -
g-gdb调试core文件
文章目录core文件判读是否为core文件打开系统 core dump修改core文件的保存路径gdb调试core文件最近初步了解了一下core 文件,已经如何将gdb工具与core文件结合调试出现段错误的程序core文件core是指操作系的程序统核心。当我们的程序在操作系统上运行异常崩溃时,操作系统会将此时系统内存状态报存下来,放入一个core文件,这个过程叫做core dump,也即是核...原创 2019-04-27 21:51:54 · 1326 阅读 · 0 评论