共享内存泄露的定位方法和定位装置与流程
未命名
07-23
阅读:153
评论:0

背景技术:
::2.随着电子设备的发展,各类应用(application,app)不断涌出,用户可以通过应用进行各类业务,例如,听音乐、聊天、打游戏等。应用可以申请系统资源,例如共享内存资源,共享内存是允许两个正在运行的进程之间共享和传递数据的内存。3.但是应用在申请了对应的共享内存之后,可能出现长时间占据共享内存但不使用,也不进行释放的共享内存泄露现象,共享内存泄露可能产生系统内存存量不足、影响系统运行的问题,这样将会导致用户在使用应用的过程中出现卡顿等性能问题,从而影响用户对电子设备的使用体验。因此,如何精准定位泄露共享内存的进程是一个亟待解决的技术问题。技术实现要素:4.本技术提供了一种共享内存泄露的定位方法和定位装置,有利于定位到泄露共享内存的进程,提高电子设备的使用性能。5.第一方面,提供了一种共享内存泄露的定位方法,该方法包括:对至少一个共享内存的文件描述符设置身份标记。在检测到该至少一个共享内存中的第一共享内存泄露的情况下,确定当前正在使用该第一共享内存的第一进程。基于该第一共享内存的文件描述符的身份标记,确定第二进程,该第一进程对应于该第一共享内存的文件描述符的身份标记与该第二进程对应于该第一共享内存的文件描述符的身份标记相同。获取并显示该第二进程对应于该第一共享内存的文件描述符的调用栈信息,该调用栈信息包括申请和/或释放该第一共享内存的信息。6.在本技术中,每个共享内存都关联一个文件描述符,对每个文件描述符设置一个身份标记,通过该身份标记可以来标识共享内存,身份标记会随着文件描述符在进程之间传递。这样可以通过身份标记确定与第一进程共享内存的至少一个第二进程,并且根据该至少一个第二进程的调用栈信息从至少一个第二进程中精准定位泄露共享内存的进程,有利于解决共享内存泄露导致的系统内存存量不足、影响系统运行的问题,从而提高电子设备的使用性能。7.结合第一方面,在第一方面的某些实现方式中,在获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息之前,该方法还包括:记录第一共享内存的文件描述符在第一进程和第二进程之间传递过程中的调用栈信息,并将第一共享内存的文件描述符的调用栈信息存储至内存中。获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息,包括:从内存中获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息。8.在本技术中,电子设备可以第一共享内存的文件描述符在第一进程和第二进程之间传递过程中的调用栈信息,在检测到第一共享内存泄露的情况下,电子设备可以输出第二进程对应于该第一共享内存的文件描述符的调用栈信息。这样有利于获取第二进程的调用栈信息,通过调用栈信息精确定位到申请或者释放共享内存的代码行。9.结合第一方面,在第一方面的某些实现方式中,在对至少一个共享内存的文件描述符设置身份标记之后,该方法还包括:通过至少一个共享内存的文件描述符指向打开文件表的指针指示至少一个共享内存的文件描述符的身份标记。通过打开文件表记录该至少一个共享内存的文件描述符的身份标记。10.在本技术中,电子设备可以通过打开文件表记录共享内存的文件描述符的身份标记,这样有利于获取身份标记,从而确定与第一进程共享内存的第二进程。11.结合第一方面,在第一方面的某些实现方式中,基于第一共享内存的文件描述符的身份标记,确定第二进程,包括:遍历所有进程对应于第一共享内存的文件描述符,并通过打开文件表获取所有进程对应于第一共享内存的文件描述符的身份标记。根据所有进程中第一进程对应于第一共享内存的文件描述符的身份标识,确定第二进程。12.结合第一方面,在第一方面的某些实现方式中,在获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息之前,该方法还包括:判断用于获取调用栈信息的功能是否开启。在获取调用栈信息的功能开启的情况下,获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息。13.在本技术中,示例性地,用于获取调用栈信息的功能为fdtrack功能。为了不中止正在进行的进程,电子设备需要在获取文件描述符的调用栈信息之前判断fdtrack功能是否开启,这样有利于提高系统的容错性。14.第二方面,提供了一种共享内存泄漏的定位装置,包括:用于执行上述第一方面中任一种可能的实现方式中的方法。具体地,该装置包括用于执行上述第一方面中任一种可能的实现方式中的方法的模块。15.第三方面,提供了另一种共享内存泄漏的定位装置,包括处理器,该处理器与存储器耦合,可用于执行存储器中的指令,以实现上述第一方面中任一种可能实现方式中的方法。可选地,该装置还包括存储器。可选地,该装置还包括通信接口,处理器与通信接口耦合。16.在一种实现方式中,该共享内存泄漏的定位装置为电子设备。当该共享内存泄漏的定位装置为电子设备时,通信接口可以是收发器,或,输入/输出接口。17.在另一种实现方式中,该共享内存泄漏的定位装置为配置于电子设备中的芯片。当该共享内存泄漏的定位装置为配置于电子设备中的芯片时,通信接口可以是输入/输出接口。18.第四方面,提供了一种处理器,包括:输入电路、输出电路和处理电路。处理电路用于通过输入电路接收信号,并通过输出电路发射信号,使得处理器执行上述第一方面中任一种可能实现方式中的方法。19.在具体实现过程中,上述处理器可以为芯片,输入电路可以为输入管脚,输出电路可以为输出管脚,处理电路可以为晶体管、门电路、触发器和各种逻辑电路等。输入电路所接收的输入的信号可以是由例如但不限于接收器接收并输入的,输出电路所输出的信号可以是例如但不限于输出给发射器并由发射器发射的,且输入电路和输出电路可以是同一电路,该电路在不同的时刻分别用作输入电路和输出电路。本技术对处理器及各种电路的具体实现方式不作限定。20.第五方面,提供了一种处理装置,包括处理器和存储器。该处理器用于读取存储器中存储的指令,并可通过接收器接收信号,通过发射器发射信号,以执行上述第一方面中任一种可能实现方式中的方法。21.可选地,处理器为一个或多个,存储器为一个或多个。22.可选地,存储器可以与处理器集成在一起,或者存储器与处理器分离设置。23.在具体实现过程中,存储器可以为非瞬时性(non-transitory)存储器,例如只读存储器(readonlymemory,rom),其可以与处理器集成在同一块芯片上,也可以分别设置在不同的芯片上,本技术对存储器的类型以及存储器与处理器的设置方式不作限定。24.应理解,相关的数据交互过程例如发送指示信息可以为从处理器输出指示信息的过程,接收能力信息可以为处理器接收输入能力信息的过程。具体地,处理输出的数据可以输出给发射器,处理器接收的输入数据可以来自接收器。其中,发射器和接收器可以统称为收发器。25.上述第五方面中的处理装置可以是一个芯片,该处理器可以通过硬件来实现也可以通过软件来实现,当通过硬件实现时,该处理器可以是逻辑电路、集成电路等;当通过软件来实现时,该处理器可以是一个通用处理器,通过读取存储器中存储的软件代码来实现,该存储器可以集成在处理器中,可以位于该处理器之外,独立存在。26.第六方面,提供了一种计算机程序产品,计算机程序产品包括:计算机程序(也可以称为代码,或指令),当计算机程序被运行时,使得计算机执行上述第一方面中任一种可能实现方式中的方法。27.第七方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序(也可以称为代码,或指令)当其在计算机上运行时,使得计算机执行上述第一方面中任一种可能实现方式中的方法。附图说明28.图1是一种共享内存的通信原理的示意图;29.图2是本技术实施例提供的一种电子设备的结构示意图;30.图3是本技术实施例适用的电子设备的一种软件结构框图;31.图4是本技术实施例提供的一种共享内存泄露的定位方法的示意性流程图;32.图5是本技术实施例提供的一种文件描述符和打开文件表的关系的示意图;33.图6是本技术实施例提供的另一种共享内存泄露的定位方法的示意性流程图;34.图7是本技术实施例提供的一种共享内存泄露的定位装置的示意性框图;35.图8是本技术实施例提供的另一种共享内存泄露的定位装置的示意性框图。具体实施方式36.下面将结合附图,对本技术中的技术方案进行描述。37.为了便于清楚描述本技术实施例的技术方案,在本技术的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。例如,第一进程和第二进程是为了区分不同的进程,并不对其先后顺序进行限定。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。38.需要说明的是,本技术中,“示例性地”或者“例如”等词用于表示作例子、例证或说明。本技术中被描述为“示例性地”或者“例如”的任何实施例或设计方案不应被解释为比其他实施例或设计方案更优选或更具优势。确切而言,使用“示例性地”或者“例如”等词旨在以具体方式呈现相关概念。39.此外,“至少一个”是指一个或者多个,“多个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b的情况,其中a,b可以是单数或者复数。字符“/”一般表示前后关联对象是一种“或”的关系。“以下至少一项(个)”或其类似表达,是指的这些项中的任意组合,包括单项(个)或复数项(个)的任意组合。例如,a、b和c中的至少一项(个),可以表示:a,或b,或c,或a和b,或a和c,或b和c,或a、b和c,其中a,b,c可以是单个,也可以是多个。40.为了更好的理解本技术实施例,首先对本技术实施例涉及的术语进行介绍。41.1、内核态和用户态42.当一个进程(或任务)执行系统调用而陷入内核代码中执行时,一般称该进程处于内核运行态,或者简称为内核态。43.当进程在执行用户自己的代码时,则称其处于用户运行态,或者简称为用户态。44.2、文件描述符(filedescriptor,fd)45.通常内核(kernel)利用文件描述符来访问文件。文件描述符是非负整数。打开现存文件或者新建文件时,内核会返回一个文件描述符。每一个文件描述符会与一个打开文件相对应,同时,不同的文件描述符也会指向同一个文件。相同的文件可以被不同的进程打开也可以在同一个进程中被多次打开。系统为每一个进程维护了一个文件描述符表(fd表),该表的值都是从0开始的,所以在不同的进程中可以看到相同的文件描述符,这种情况下相同文件描述符可能指向同一个文件,也可能指向不同的文件。46.3、共享内存(sharedmemory)47.共享内存可以允许两个不相关的进程访问同一个虚拟内存,是在两个正在运行的进程之间共享和传递数据的一种非常高效的进程间通信(inter-processcommunication,ipc)方式。不同进程之间共享的内存通常安排为同一段物理内存,进程可以将同一段共享内存连接到各自的地址空间中,所有进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,这个进程对共享内存的改动将立即影响到可以访问同一段共享内存的任何其他进程。48.下面结合图1,以安卓(android)系统为例对共享内存的通信原理进行介绍。49.图1是一种共享内存的通信原理的示意图。如图1所示,进程a和进程b都有属于自己的进程控制块(processcontrolblock,pcb)和地址空间(addressspace),并且都有一个与之对应的页表,负责将进程的虚拟地址与物理地址进行映射,通过内存管理单元(memorymanagementunit,mmu)进行管理。两个不同的虚拟地址通过页表映射到物理空间的同一区域,它们所指向的这块区域即为共享内存。50.当进程a和进程b通过页表将虚拟地址映射到物理地址时,在物理地址中有一块共同的内存区,即共享内存,这块内存可以被进程a和进程b同时看到。这样一个进程进行写操作,另一个进程进行读操作就可以实现进程间通信。51.安卓系统中很多场景都在使用共享内存进行数据通信,共享内存的方式可以包括匿名共享内存(anonymoussharedmemory,ashmem)、memfd和ion。下面以匿名共享内存为例进行介绍。52.其中,匿名共享内存是基于linux的共享内存,可以在临时文件系统(tempfilesystem,tmpfs)上创建虚拟文件,再映射到不同的进程。他可以让多个进程操作同一块内存区域,并且除了物理内存限制,没有其他大小限制。java层在使用时需要用到共享内存文件(memoryfile),共享内存文件封装了本地(native)代码。java层在使用匿名共享内存的节点包括:53.(1)通过共享内存文件开辟内存空间,获得文件描述符。54.(2)将文件描述符传递给其他进程。55.(3)向共享内存中写入数据。56.(4)从共享内存中读取数据。57.其中,每个共享内存关联一个fd,共享内存文件可以通过binder机制来传输共享内存的fd,通过fd的传输可以进行共享内存的共享,fd的转换的binder驱动中完成。58.binder是安卓的一种独特的ipc机制,binder的底层技术原理是linux的内存映射技术,也就是用户态进程可以和内核态进程共享同一块内存,这样就减少了内存读写的操作数。59.在android系统中,电子设备在多进程使用共享内存时需要将共享内存的文件描述符传递给其他进程,这个过程是用binder实现的。此外,电子设备在使用共享内存时需要在进程间传输控制信息,这个传输在android中也只能通过binder机制实现。60.通常在使用共享内存的过程中可能存在共享内存泄露的问题。示例性地,共享内存在进程a申请,在进程b应该被释放,但是在进程b中可能由于某种原因,例如,代码出现错误,或者忘记调用释放函数,使得这块共享内存一直处于被占用的状态,这样就造成了共享内存泄露的问题。61.申请共享内存和释放共享内存的可能是不同的进程,无法知道共享内存被哪些进程使用了,有可能共享内存是在进程a中申请,在进程b中使用,在进程c中释放,这样无法定位到哪个进程在占用共享内存。62.目前业界可以通过为共享内存命名的方式确定哪些进程在共享同一块共享内存,例如使用匿名共享内存调用libcutils里的函数ashmem_create_region。63.然而,并不是所有的共享内存都可以被命名,在无法命名的情况下便难以定位到泄露共享内存的进程。64.有鉴于此,本技术实施例提供一种共享内存泄露的定位方法和定位装置,该方法可以为每个共享内存的文件描述符设置身份标记,通过该身份标记可以标识共享内存,由于进程间在使用共享内存进行通信的过程中会传递文件描述符,这样共享内存的身份标记也会在进程之间传递。针对泄露的共享内存,可以通过泄露的共享内存的身份标记跟踪共享内存的分配路径,确定泄露的共享内存在哪些进程中被共享,这样有利于开发人员定位到泄露共享内存的进程,提高电子设备的使用性能。65.本技术实施例涉及的电子设备可以为具有操作系统的电子设备,例如,手机、平板电脑、个人计算机(personalcomputer,pc)、智能手表等可穿戴电子设备,各种教学辅助工具(例如学习机、早教机)、智能玩具、便携式机器人、个人数字助理(personaldigitalassistant,pda)、增强现实技术(augmentedreality,ar)设备、虚拟现实(virtualreality,vr)设备等。66.为了能够更好地理解本技术实施例,下面对本技术实施例的电子设备的硬件结构进行介绍。示例性地,图2为本技术实施例提供的一种电子设备的结构示意图。67.电子设备可以包括处理器110,外部存储器接口120,内部存储器121,通用串行总线(universalserialbus,usb)接口130,充电管理模块140,电源管理模块141,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170a,受话器170b,麦克风170c,传感器模块180,按键190,指示器192,摄像头193,以及显示屏194等。68.可选地,上述传感器模块180可以包括压力传感器180a,陀螺仪传感器180b,气压传感器180c,磁传感器180d,加速度传感器180e,距离传感器180f,接近光传感器180g,指纹传感器180h,温度传感器180j,触摸传感器180k,环境光传感器180l,骨传导传感器180m等。69.可以理解的是,本技术实施例示意的结构并不构成对电子设备的具体限定。在本技术另一些实施例中,电子设备可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。70.处理器110可以包括一个或多个处理单元。其中,不同的处理单元可以是独立的器件,也可以集成在一个或多个处理器中。处理器110中还可以设置存储器,用于存储指令和数据。71.usb接口130是符合usb标准规范的接口,具体可以是miniusb接口,microusb接口,usbtypec接口等。usb接口130可以用于连接充电器为电子设备充电,也可以用于电子设备与外围设备之间传输数据。也可以用于连接耳机,通过耳机播放音频。该接口还可以用于连接其他电子设备,例如ar设备等。72.充电管理模块140用于从充电器接收充电输入。其中,充电器可以是无线充电器,也可以是有线充电器。电源管理模块141用于连接充电管理模块140与处理器110。73.电子设备的无线通信功能可以通过天线1,天线2,移动通信模块150,无线通信模块160,调制解调处理器以及基带处理器等实现。74.天线1和天线2用于发射和接收电磁波信号。电子设备中的天线可用于覆盖单个或多个通信频带。不同的天线还可以复用,以提高天线的利用率。75.移动通信模块150可以提供应用在电子设备上的包括2g/3g/4g/5g等无线通信的解决方案。移动通信模块150可以包括至少一个滤波器,开关,功率放大器,低噪声放大器(lownoiseamplifier,lna)等。移动通信模块150可以由天线1接收电磁波,并对接收的电磁波进行滤波,放大等处理,传送至调制解调处理器进行解调。76.无线通信模块160可以提供应用在电子设备上的包括无线局域网(wirelesslocalareanetworks,wlan)(如无线保真(wirelessfidelity,wi-fi)网络),蓝牙(bluetooth,bt),全球导航卫星系统(globalnavigationsatellitesystem,gnss),调频(frequencymodulation,fm)等无线通信的解决方案。77.电子设备通过gpu,显示屏194以及应用处理器等实现显示功能。gpu为图像处理的微处理器,连接显示屏194和应用处理器。gpu用于执行数学和几何计算,用于图形渲染。78.显示屏194用于显示图像,视频等。显示屏194包括显示面板。在一些实施例中,电子设备可以包括1个或n个显示屏194,n为大于1的正整数。79.电子设备可以通过isp,摄像头193,视频编解码器,gpu,显示屏194以及应用处理器等实现拍摄功能。80.摄像头193用于捕获静态图像或视频。在一些实施例中,电子设备可以包括1个或n个摄像头193,n为大于1的正整数。81.外部存储器接口120可以用于连接外部存储卡,例如microsd卡,实现扩展电子设备的存储能力。外部存储卡通过外部存储器接口120与处理器110通信,实现数据存储功能。例如将音乐,视频等文件保存在外部存储卡中。82.内部存储器121可以用于存储计算机可执行程序代码,可执行程序代码包括指令。内部存储器121可以包括存储程序区和存储数据区。83.电子设备可以通过音频模块170,扬声器170a,受话器170b,麦克风170c,以及应用处理器等实现音频功能。例如音乐播放,录音等。84.音频模块170用于将数字音频信息转换成模拟音频信号输出,也用于将模拟音频输入转换为数字音频信号。扬声器170a,也称“喇叭”,用于将音频电信号转换为声音信号。电子设备可以通过扬声器170a收听音乐,或收听免提通话。受话器170b,也称“听筒”,用于将音频电信号转换成声音信号。当电子设备接听电话或语音信息时,可以通过将受话器170b靠近人耳接听语音。麦克风170c,也称“话筒”,“传声器”,用于将声音信号转换为电信号。85.压力传感器180a用于感受压力信号,可以将压力信号转换成电信号。在一些实施例中,压力传感器180a可以设置于显示屏194。陀螺仪传感器180b可以用于确定电子设备的运动姿态。气压传感器180c用于测量气压。磁传感器180d包括霍尔传感器。加速度传感器180e可检测电子设备在各个方向上(一般为三轴)加速度的大小。距离传感器180f,用于测量距离。接近光传感器180g可以包括例如发光二极管(led)和光检测器,例如光电二极管。环境光传感器180l用于感知环境光亮度。指纹传感器180h用于采集指纹。温度传感器180j用于检测温度。触摸传感器180k,也称“触控器件”。触摸传感器180k可以设置于显示屏194,由触摸传感器180k与显示屏194组成触摸屏,也称“触控屏”。骨传导传感器180m可以获取振动信号。86.按键190包括开机键,音量键等。按键190可以是机械按键。也可以是触摸式按键。电子设备可以接收按键输入,产生与电子设备的用户设置以及功能控制有关的键信号输入。指示器192可以是指示灯,可以用于指示充电状态,电量变化,也可以用于指示消息,未接来电,通知等。87.电子设备的软件系统可以采用分层架构,事件驱动架构,微核架构,微服务架构,或云架构。分层架构可以采用安卓(android)系统,也可以采用苹果(ios)系统,还可以采样其他操作系统,本技术实施例对此不作限定。88.下面以分层架构的android系统为例,示例性说明电子设备的软件结构。89.图3是本技术实施例适用的电子设备的一种软件结构框图。分层架构将电子设备的软件系统分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,可以将android系统分为四层,从上到下依次为应用程序层、应用程序框架层(applicationframework)、安卓运行时(androidruntime)和系统库、以及内核层(kernel)。90.应用程序层可以包括一系列应用程序包,应用程序层通过调用应用程序框架层所提供的应用程序接口(applicationprogramminginterface,api)运行应用程序。如图3所示,应用程序包可以包括相机,图库,日历,通话,地图,导航,蓝牙,音乐,视频,短信息等应用程序。91.应用程序框架层为应用程序层的应用程序提供api和编程框架。应用程序框架层包括一些预先定义的函数。如图3所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器等。92.窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。电话管理器用于提供电子设备的通信功能。例如通话状态的管理(包括接通,挂断等)。资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等。通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息,可以短暂停留后自动消失,无需用户交互。比如通知管理器被用于告知下载完成,消息提醒等。通知管理器还可以是以图表或者滚动条文本形式出现在系统顶部状态栏的通知,例如后台运行的应用程序的通知,还可以是以对话窗口形式出现在屏幕上的通知。例如在状态栏提示文本信息,发出提示音,电子设备振动,指示灯闪烁等。93.安卓系统运行时包括核心库和虚拟机。安卓系统运行时负责安卓系统的调度和管理。核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。系统库也可以理解为本地服务(native),可以包括c语言或者c++语言的库,可以被android系统中不同的组件使用,系统库还可以通过应用程序框架层为开发者提供服务。系统库可以包含多个功能的模块,例如:表面管理器、共享内存泄露检测模块、共享内存泄露定位模块、文件描述符追踪(fdtrack)模块、函数导出模块。94.可选地,系统库还可以包括输出模块,也可以称为dump模块,用于输出文件描述符的调用栈信息。95.表面管理器用于对显示子系统进行管理,并且为多个应用程序提供了二维图层和三维图层的融合。共享内存泄露检测模块用于检测是否存在共享内存泄露。共享内存泄露定位模块用于在共享内存泄露检测模块检测到共享内存泄露的情况下,定位造成共享内存泄露的进程。文件描述符追踪(fdtrack)模块用于记录文件描述符的调用栈信息。函数导出模块用于导出_android_fdtrack_hook函数使其他库调用。96.可选地,共享内存泄露定位模块可以包括多个模块,例如,关联进程获取模块和日志获取模块。其中,关联进程获取模块用于获取与当前进程使用相同的共享内存的进程,其中,可以将与当前进程使用相同的共享内存的进程称为当前进程的关联进程。日志获取模块用于获取关联进程的文件描述符追踪(fdtrack)日志。97.内核层是硬件和软件之间的层。内核层用于驱动硬件,使得硬件工作。内核层至少包含摄像头驱动和传感器驱动等,本技术实施例对此不做限制。内核层也可以同时作为硬件和软件栈之间的抽象层,可以包含多个库模块,库模块可以为文件描述符身份标记模块,用于记录每个进程对应的文件描述符的身份标记。98.示例性地,针对libion库,可以通过ion_map、ion_share和ion_alloc_fd调用fdtrack_create函数从内核层获取在进程间传输的文件描述符的身份标记。99.上述共享内存泄露定位模块也可以称为hiview模块,文件描述符追踪模块也可以称为libion/libbinder/libhwbinder模块,函数导出模块也可以称为libc模块。100.应理解,上述图3中各个模块的名称仅仅为本技术实施例为了便于介绍给出的示例,本技术实施例对这些模块的名称不作限定。101.图4是本技术实施例提供的一种共享内存泄露的定位方法400的示意性流程图。方法400可以应用于电子设备,电子设备的硬件结构图可以如图2所示,电子设备的软件结构框图可以如图3所示,但本技术实施例对此不作限定。方法400包括如下步骤:102.s401,对至少一个共享内存的文件描述符设置身份标记。103.其中,每个共享内存都关联一个文件描述符,对每个文件描述符设置一个身份标记,通过该身份标记可以来标识共享内存,身份标记会随着文件描述符在进程之间传递。104.s402,在检测到该至少一个共享内存中的第一共享内存泄露的情况下,确定当前正在使用该第一共享内存的第一进程。105.其中,电子设备可以通过上述共享内存泄漏检测模块检测是否存在共享内存泄露。106.s403,基于该第一共享内存的文件描述符的身份标记,确定第二进程,该第一进程对应于该第一共享内存的文件描述符的身份标记与该第二进程对应于该第一共享内存的文件描述符的身份标记相同。107.示例性地,第二进程的数量为至少一个。108.应理解,第一进程可以申请多个共享内存和多个进程通信,进程在每次申请共享内存时都会对应于申请的共享内存生成一个文件描述符。进程之间在使用共享内存进行通信的过程中,通过传递文件描述符的方式将文件描述符的身份标记在进程之间传递,电子设备可以通过文件描述符的文件记录每个进程在和哪些进程使用共享内存,并通过上述共享内存泄露定位模块,从内核层的文件描述符的文件中确定第二进程。109.本技术实施例中可以将第二进程描述为第一进程的关联进程。110.s404,获取并显示该第二进程对应于该第一共享内存的文件描述符的调用栈信息,该调用栈信息包括申请和/或释放该第一共享内存的信息。111.在本技术实施例中,电子设备可以为每个共享内存的文件描述符设置身份标记,在检测到发生共享内存泄露的情况下,电子设备可以根据第一进程对应于第一共享内存的文件描述符的文件确定第二进程,也就是第一进程和第二进程在共享内存,该调用栈信息包括申请和/或释放该第一共享内存的信息,后台开发人员可以通过该第二进程对该第一共享内存的申请和/或释放的调用栈信息定位第一共享内存泄露的具体代码位置,这样有利于及时对电子设备的共享内存泄露问题进行定位,提高电子设备的使用性能。112.示例性地,第一进程可以对应多个文件描述符。由于有些共享内存被申请了但是一直没有被释放,造成共享内存泄露,因此第一进程对应的多个共享内存的文件描述符较多,如果第一进程申请的共享内存被释放了,那么第一进程的文件描述符的数量也随之减少。113.示例性地,第一进程的进程号为1354,可以和进程号为1589、2842、2856以及3058的第二进程共享内存。共享内存泄露定位模块可以获取进程号为1589、2842、2856以及3058的第二进程的进程信息,其中,第二进程的进程信息可以包括第二进程的文件描述符。114.可选地,第二进程的进程信息还可以包括第二进程的进程号、第二进程的名称或者第二进程的文件描述符的名称中的至少一种。115.作为一个可选的实施例,在s404之前,方法400还包括:记录上述第一共享内存的文件描述符在第一进程和第二进程之间传递过程中的调用栈信息,并将该第一共享内存的文件描述符的调用栈信息存储至内存中。s404包括:从内存中获取并显示第二进程对应于该第一共享内存的文件描述符的调用栈信息。116.在本技术实施例中,电子设备可以通过上述文件描述符追踪模块记录第一共享内存的文件描述符在第一进程和第二进程之间传递过程中的调用栈信息,在检测到第一共享内存泄露的情况下,电子设备可以输出第二进程对应于该第一共享内存的文件描述符的调用栈信息。117.示例性地,第二进程的进程号为1589,进程号为1589的第二进程的文件描述符为8,电子设备可以通过日志获取模块获取文件描述符为8的文件描述符追踪(fdtrack)日志,文件描述符追踪日志中包括文件描述符的调用栈信息。118.示例性地,后台开发人员可以对文件描述符的调用栈信息进行反编译,定位共享内存是在哪个进程中被申请上午,可能在申请共享内存的进程中忘记调用释放函数从而导致的共享内存泄露。119.作为一个可选的实施例,s403包括:遍历所有进程对应于第一共享内存的文件描述符,并通过内核获取所有进程对应于第一共享内存的文件描述符的身份标记。根据所有进程中的第一进程对应于第一共享内存的文件描述符的身份标识,确定第二进程。120.在本技术实施例中,电子设备可以通过内核层的文件描述符身份标记模块提供文件描述符的身份标记信息,根据文件描述符的身份标记确定第二进程。121.示例性地,电子设备可以循环使用kcmp系统调用判断两个文件描述符是否关联到同一个打开文件表(openfiletable),打开文件表也可以叫做打开的文件描述表(openfiledescription,ofd)。122.图5是本技术实施例提供的一种文件描述符和打开文件表的关系的示意图。图5示出了文件描述符的三个核心数据结构:文件描述符表(fd表)、系统范围的打开文件表以及系统范围的索引节点表(indexnodetable,i-node表)。123.其中,文件描述符表可以包括文件描述符标志和文件指针。打开文件表可以包括文件偏移量、状态表示和索引节点指针。索引节点表可以包括文件类型和文件锁。124.如图5所示,进程a和进程b都有一个文件描述符表,外部的fd是文件描述符表的索引。文件描述符表的每一项包含一个指针指向打开文件表。打开文件表也有一个指针,指向索引节点表,打开文件表外部的数字表示打开文件表的索引。索引节点表的每一项指示一个文件类型,索引节点表外部的数字表示索引节点表的索引。125.其中,同一个进程的多个文件描述符可以关联到同一个打开文件表。示例性地,进程a的文件描述符1和进程a的文件描述符20可以指向打开文件表23,例如可以使用dup或dup2复制文件描述符实现。打开文件表23再指向索引节点表224。126.不同进程的文件描述符可以关联到同一个打开文件表。示例性地,进程a的文件描述符2和进程b的文件描述符2指向打开文件表73,打开文件表73再指向索引节点表5139。127.不同进程的文件描述符可以关联到不同的打开文件表。示例性地,进程a的文件描述符0指向打开文件表0,进程b的文件描述符3指向打开文件表86,进程a的文件描述符0和进程b的文件描述符3指向了不同的打开文件表,但是不同的打开文件表可以指向同一个索引节点表,例如打开文件表0和打开文件表086指向索引节点表1976。128.电子设备可以通过文件描述符对应的指针指示共享内存的身份标记,并通过打开文件表记录进程a的文件描述符的身份标记和进程b的文件描述符的身份标记。在共享内存泄漏检测模块在检查到共享内存泄露的情况下,电子设备通过共享内存泄漏定位模块获取独赢的共享信息日志,也就是获取与第一进程共享内存的第二进程的进程信息。129.作为一个可选的实施例,在s404之前,方法400还包括:判断用于获取调用栈信息的功能是否开启。在获取调用栈信息的功能开启的情况下,获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息。130.在本技术实施例中,示例性地,用于获取调用栈信息的功能为fdtrack功能。为了保证正在进行的进程不被中止,需要在获取文件描述符的调用栈信息之前判断fdtrack功能是否开启,例如电子设备扫描libfdtrack库是否存在。如果libfdtrack库存在,那么电子设备可以通过共享内存泄露定位模块向用户态进程(例如上述第一进程)发送获取信号,用户态进程响应获取信息并通过函数导出模块从内存中获取在文件描述符传输过程中记录的调用栈信息。131.示例性地,发送获取信号可以为调用kill信号。如果系统中不存在libfdtrack库,那么共享内存泄露定位模块调用kill信号可能使得用户态进程退出,因此本技术实施例有利于提高系统的容错性。132.图6是本技术实施例提供的另一种共享内存泄露的定位方法600的示意性流程图。方法600可以应用于电子设备,电子设备的硬件结构图可以如图2所示,电子设备的软件结构框图可以如图3所示,但本技术实施例对此不作限定。方法600包括如下步骤:133.s601,文件描述符身份标记模块记录文件描述符的身份标记。134.文件描述符身份标记模块可以在生成文件描述符的时候为文件描述符设置身份标记,并通过文件描述符指向打开文件表指针指示身份标记,文件描述符身份标记模块通过打开文件表将文件描述符的身份标记进行记录。135.示例性地,可以通过电子设备的子例程打开(open)或者创建(create)以生成文件描述符,或者通过从父进程继承。136.示例性地,该身份标记可以用哈希值表示。137.s602,函数导出模块调用新增的应用程序接口(applicationprogramminginterface,api)导出第一接口。138.示例性地,第一接口可以为安卓原生的用于追踪文件描述符的接口。导出第一接口可以通过导出_android_fdtrack_hook函数实现。139.s603,函数导出模块向文件描述符追踪模块发送该第一接口。相应地,文件描述符追踪模块接收该第一接口。140.s604,文件描述符追踪模块基于该第一接口对文件描述符的调用栈信息进行追踪和记录。141.s605,共享内存泄露检测模块检测是否存在共享内存泄露。在检测到共享内存泄露的情况下,执行s606。142.s606,共享内存泄露检测模块向关联进程获取模块发送指示信息,该指示信息用于指示发生共享内存泄漏。相应地,关联进程获取模块接收该指示信息。143.s607,关联进程获取模块基于该指示信息,向文件描述符身份标记模块发送请求获取关联进程的信息。相应地,文件描述符身份标记模块接收该请求获取关联进程的信息。144.s608,文件描述符身份标记模块向关联进程获取模块发送关联进程的进程信息。相应地,关联进程获取模块接收关联进程的进程信息。145.以发生共享内存泄漏的共享内存为第一共享内存,当前正在使用该第一共享内存的进程为第一进程,第一进程的关联进程为第二进程为例,文件描述符身份标记模块可以通过记录的文件描述符的身份标记,确定与第一进程共享第一共享内存的第二进程。146.其中,关联进程的进程信息可以包括关联进程的文件描述符。147.可选地,关联进程的进程信息还可以包括关联进程的进程号、关联进程的名称或者关联进程的文件描述符的名称中的至少一种。148.s609,关联进程获取模块向日志获取模块发送关联进程的进程信息。相应地,日志获取模块接收关联进程的进程信息。149.s610,日志获取模块向文件描述符追踪模块发送请求获取文件描述符的调用栈信息的信息。相应地,文件描述符追踪模块接收该请求获取文件描述符的调用栈信息的信息。150.s611,文件描述符追踪模块调用输出函数输出并显示文件描述符的调用栈信息。151.示例性地,输出函数可以是dump函数。152.在本技术实施例提供的共享内存泄露的定位方法中,电子设备可以通过对共享内存的文件描述符设置身份标记,在进程之间传输文件描述符的过程中进行身份标记的传输。在文件描述符传输的过程中,电子设备可以记录共享内存的身份标记,并通过一个对外接口对文件描述符进行追踪并记录文件描述符的调用栈信息。在检测到共享内存泄露的情况下,电子设备可以基于进程使用的共享内存的身份标记定位到与当前进程在共享内存的关联进程,并将关联进程的调用栈信息显示出来以供开发人员对共享内存的申请和/或释放的代码位置进行定位,有利于提高电子设备的使用性能。153.上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本技术实施例的实施过程构成任何限定。154.上文中结合图1至图6,详细描述了根据本技术实施例的共享内存泄露的定位方法,下面将结合图7和图8详细描述根据本技术实施例的共享内存泄露的定位装置。155.图7示出了本技术实施例提供的一种共享内存泄露的定位装置700的示意性框图,该装置700包括处理模块710和获取模块720。156.其中,处理模块710用于:对至少一个共享内存的文件描述符设置身份标记;在检测到至少一个共享内存中的第一共享内存泄露的情况下,确定当前正在使用第一共享内存的第一进程;以及,基于第一共享内存的文件描述符的身份标记,确定第二进程,第一进程对应于第一共享内存的文件描述符的身份标记与第二进程对应于第一共享内存的文件描述符的身份标记相同。获取模块720用于:获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息,调用栈信息包括申请和/或释放第一共享内存的信息。157.可选地,处理模块710用于:记录第一共享内存的文件描述符在第一进程和第二进程之间传递过程中的调用栈信息,并将第一共享内存的文件描述符的调用栈信息存储至内存中。获取模块720用于:从内存中获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息。158.可选地,处理模块710用于:通过该至少一个共享内存的文件描述符指向打开文件表的指针指示该至少一个共享内存的文件描述符的身份标记;以及,通过打开文件表记录该至少一个共享内存的文件描述符的身份标记。159.可选地,处理模块710用于:遍历所有进程对应于第一共享内存的文件描述符,并通过打开文件表获取所有进程对应于第一共享内存的文件描述符的身份标记;以及,根据所有进程中第一进程对应于第一共享内存的文件描述符的身份标识,确定第二进程。160.可选地,处理模块710用于:判断用于获取调用栈信息的功能是否开启。获取模块720用于:在获取调用栈信息的功能开启的情况下,获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息。161.在一个可选的例子中,本领域技术人员可以理解,装置700可以具体为上述实施例中的电子设备,或者,上述实施例中电子设备的功能可以集成在装置700中。上述功能可以通过硬件实现,也可以通过硬件执行相应的软件实现。该硬件或软件包括一个或多个与上述功能相对应的模块。装置700可以用于执行上述方法实施例中与电子设备对应的各个流程和/或步骤。162.应理解,这里的装置700以功能模块的形式体现。这里的术语“模块”可以指应用特有集成电路(applicationspecificintegratedcircuit,asic)、电子电路、用于执行一个或多个软件或固件程序的处理器(例如共享处理器、专有处理器或组处理器等)和存储器、合并逻辑电路和/或其它支持所描述的功能的合适组件。在本技术的实施例,图7中的装置700也可以是芯片或者芯片系统,例如:片上系统(systemonchip,soc)。163.图8示出了本技术实施例提供的另一种共享内存泄露的定位装置800的示意性框图。该装置800包括处理器810、收发器820和存储器830。其中,处理器810、收发器820和存储器830通过内部连接通路互相通信,该存储器830用于存储指令,该处理器810用于执行该存储器830存储的指令,以控制该收发器820发送信号和/或接收信号。164.应理解,装置800可以具体为上述实施例中的电子设备,或者,上述实施例中电子设备的功能可以集成在装置800中,装置800可以用于执行上述方法实施例中与电子设备对应的各个步骤和/或流程。可选地,该存储器830可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器的一部分还可以包括非易失性随机存取存储器。例如,存储器还可以存储设备类型的信息。该处理器810可以用于执行存储器中存储的指令,并且该处理器执行该指令时,该处理器可以执行上述方法实施例中与电子设备对应的各个步骤和/或流程。165.应理解,在本技术实施例中,该处理器810可以是中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(dsp)、专用集成电路(asic)、现场可编程门阵列(fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。166.本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的模块及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本技术的范围。167.所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。168.在本技术所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。169.所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。170.另外,在本技术各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。171.所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(read-onlymemory,rom)、随机存取存储器(randomaccessmemory,ram)、磁碟或者光盘等各种可以存储程序代码的介质。172.以上所述,仅为本技术的具体实施方式,但本技术实施例的保护范围并不局限于此,任何熟悉本
技术领域:
:的技术人员在本技术实施例揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本技术实施例的保护范围之内。因此,本技术实施例的保护范围应所述以权利要求的保护范围为准。当前第1页12当前第1页12
技术特征:
1.一种共享内存泄露的定位方法,其特征在于,包括:对至少一个共享内存的文件描述符设置身份标记;在检测到所述至少一个共享内存中的第一共享内存泄露的情况下,确定当前正在使用所述第一共享内存的第一进程;基于所述第一共享内存的文件描述符的身份标记,确定第二进程,所述第一进程对应于所述第一共享内存的文件描述符的身份标记与所述第二进程对应于所述第一共享内存的文件描述符的身份标记相同;获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息,所述调用栈信息包括申请和/或释放所述第一共享内存的信息。2.根据权利要求1所述的方法,其特征在于,在所述获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息之前,所述方法还包括:记录所述第一共享内存的文件描述符在所述第一进程和所述第二进程之间传递过程中的调用栈信息,并将所述第一共享内存的文件描述符的调用栈信息存储至内存中;所述获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息,包括:从所述内存中获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息。3.根据权利要求1或2所述的方法,其特征在于,在所述对至少一个共享内存的文件描述符设置身份标记之后,所述方法还包括:通过所述至少一个共享内存的文件描述符指向打开文件表的指针指示所述至少一个共享内存的文件描述符的身份标记;通过所述打开文件表记录所述至少一个共享内存的文件描述符的身份标记。4.根据权利要求3所述的方法,其特征在于,所述基于所述第一共享内存的文件描述符的身份标记,确定第二进程,包括:遍历所有进程对应于所述第一共享内存的文件描述符,并通过所述打开文件表获取所述所有进程对应于所述第一共享内存的文件描述符的身份标记;根据所述所有进程中所述第一进程对应于所述第一共享内存的文件描述符的身份标识,确定所述第二进程。5.根据权利要求1-4中任一项所述的方法,其特征在于,在所述获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息之前,所述方法还包括:判断用于获取所述调用栈信息的功能是否开启;所述获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息,包括:在所述获取所述调用栈信息的功能开启的情况下,获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息。6.一种共享内存泄露的定位装置,其特征在于,包括:处理模块,用于对至少一个共享内存的文件描述符设置身份标记;所述处理模块还用于:在检测到所述至少一个共享内存中的第一共享内存泄露的情况下,确定当前正在使用所述第一共享内存的第一进程;
所述处理模块还用于:基于所述第一共享内存的文件描述符的身份标记,确定第二进程,所述第一进程对应于所述第一共享内存的文件描述符的身份标记与所述第二进程对应于所述第一共享内存的文件描述符的身份标记相同;获取模块,用于获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息,所述调用栈信息包括申请和/或释放所述第一共享内存的信息。7.根据权利要求6所述的装置,其特征在于,所述处理模块用于:记录所述第一共享内存的文件描述符在所述第一进程和所述第二进程之间传递过程中的调用栈信息,并将所述第一共享内存的文件描述符的调用栈信息存储至内存中;所述获取模块用于:获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息,所述调用栈信息包括申请和/或释放所述第一共享内存的信息。8.根据权利要求6或7所述的装置,其特征在于,所述处理模块用于:通过所述至少一个共享内存的文件描述符指向打开文件表的指针指示所述至少一个共享内存的文件描述符的身份标记;通过所述打开文件表记录所述至少一个共享内存的文件描述符的身份标记。9.根据权利要求8所述的装置,其特征在于,所述处理模块用于:遍历所有进程对应于所述第一共享内存的文件描述符,并通过所述打开文件表获取所述所有进程对应于所述第一共享内存的文件描述符的身份标记;根据所述所有进程中所述第一进程对应于所述第一共享内存的文件描述符的身份标识,确定所述第二进程。10.根据权利要求6-9中任一项所述的装置,其特征在于,所述处理模块用于:判断用于获取所述调用栈信息的功能是否开启;所述获取模块用于:在所述获取所述调用栈信息的功能开启的情况下,获取并显示所述第二进程对应于所述第一共享内存的文件描述符的调用栈信息。11.一种共享内存泄露的定位装置,其特征在于,包括:处理器,所述处理器与存储器耦合,所述存储器用于存储计算机程序,当所述处理器调用所述计算机程序时,使得所述装置执行如权利要求1-5中任一项所述的方法。12.一种计算机可读存储介质,其特征在于,用于存储计算机程序,所述计算机程序包括用于实现如权利要求1-5中任一项所述的方法的指令。13.一种计算机程序产品,其特征在于,所述计算机程序产品中包括计算机程序代码,当所述计算机程序代码在计算机上运行时,使得计算机实现如权利要求1-5中任一项所述的方法。
技术总结
本申请提供了一种共享内存泄露的定位方法和定位装置,有利于定位到泄露共享内存的进程,提高电子设备的使用性能。该方法包括:对至少一个共享内存的文件描述符设置身份标记;在检测到至少一个共享内存中的第一共享内存泄露的情况下,确定当前正在使用第一共享内存的第一进程;基于第一共享内存的文件描述符的身份标记,确定第二进程,其中,第一进程对应于第一共享内存的文件描述符的身份标记与第二进程对应于第一共享内存的文件描述符的身份标记相同;获取并显示第二进程对应于第一共享内存的文件描述符的调用栈信息,调用栈信息包括申请和/或释放第一共享内存的信息。申请和/或释放第一共享内存的信息。申请和/或释放第一共享内存的信息。
技术研发人员:赵俊民 陆尚烨 余亮
受保护的技术使用者:荣耀终端有限公司
技术研发日:2022.01.07
技术公布日:2023/7/21

版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/