一种通过内核结束使用sd 卡进程的方法及系统的制作方法
【技术领域】
[0001]本发明涉及移动终端技术领域,特别是涉及技术领域,具体为一种通过内核结束使用SD卡进程的方法及系统。
【背景技术】
[0002]现在移动终端产品中都会保留一块存储区作为用户存储设备。该存储区在终端没有连接电脑的时候会被系统加载,作为内置SD卡供应用程序存储数据;当终端连上电脑的时候,该存储区可作为一个U盘供用户在计算机和终端之间传输数据。然而,在很多情况下把终端连接到计算机上,选择U盘模式,此时计算机中只显示出一个磁盘,并不能读写该磁盘中的文件。造成该问题的原因是终端产品中有进程在使用内置SD卡,且无法被关闭,从而内置SD卡不能成功卸载,计算机就无法访问该空间。
[0003]现有技术是通过在应用层查询PROC文件系统,通过遍历该PROC目录,查找使用SD卡的进程,找到后,发送信号关闭该进程。该方法有两个缺点,一是无法对PROC目录加锁,在遍历该目录的过程中,可能新产生进程,而该新进程就无法通过找到;二是发出的信号有可能被丢弃,从而不能成功关闭使用SD卡的进程。
[0004]如何解决通过结束使用SD卡进程的中面临的以上问题成为本领域技术人员亟待解决的问题。
【发明内容】
[0005]鉴于以上所述现有技术的缺点,本发明的目的在于提供一种通过内核结束使用SD卡进程的方法及系统,用于解决现有技术中结束使用SD卡进程的中存在可能产生新进程和不能有效关闭使用SD卡进程的问题。
[0006]为实现上述目的及其他相关目的,本发明提供一种通过内核结束使用SD卡进程的方法,用于结束使用Iinux内核的移动终端内的SD卡的进程,所述通过内核结束使用SD卡进程的方法包括:遍历进程链表;判断链表中的进程的目录是否为SD卡,若是,则向目录为SD卡的进程发出结束进程信号,以结束该进程,若否,则继续判断进程打开的文件列表中是否有vfsmount指针指向SD卡的vfsmount数据结构,若是,贝Ij向目录为SD卡的进程发出结束进程信号,以结束该进程。
[0007]作为本发明的一种优选方案,所述通过内核结束使用SD卡进程的方法还包括:在遍历进程链表前,对所述进程链表加锁。
[0008]作为本发明的一种优选方案,所述目录为进程的根目录或当前目录。
[0009]作为本发明的一种优选方案,通过查看进程的file_struct数据结构判断链表中的进程的目录是否为SD卡。
[0010]作为本发明的一种优选方案,通过Iinux内核的do_new_mount函数判断SD卡分区,并将SD卡的vfsmount数据结构以全局变量的形式存储。
[0011]为实现上述目的,本发明还提供一种通过内核结束使用SD卡进程的系统,用于结束使用Iinux内核的移动终端内的SD卡的进程,所述通过内核结束使用SD卡进程的系统包括:遍历模块,用于遍历进程链表;判断模块,与所述遍历模块相连,用于判断链表中的进程的目录是否为SD卡和判断进程打开的文件列表中是否有vfsmount指针指向SD卡的vfsmount数据结构;进程结束模块,与所述判断模块相连,在链表中的进程的目录为SD卡时或进程打开的文件列表中有vfsmount指针指向SD卡的vfsmount数据结构时,用于向目录为SD卡的进程发出结束进程信号,以结束该进程。
[0012]作为本发明的一种优选方案,所述通过内核结束使用SD卡进程的系统还包括与所述遍历模块相连的加锁模块,所述加锁模块在遍历进程链表前,用于对所述进程链表加锁。
[0013]作为本发明的一种优选方案,所述目录为进程的根目录或当前目录。
[0014]作为本发明的一种优选方案,所述通过内核结束使用SD卡进程的系统还包括与所述判断模块相连的查看模块,所述查看模块用于查看进程的file_StruCt数据结构;所述判断模块通过所述查看模块查看的进程的file_struct数据结构判断链表中的进程的目录是否为SD卡。
[0015]作为本发明的一种优选方案,所述通过内核结束使用SD卡进程的系统还包括设置于所述移动终端内的:分区判断模块,用于通过Iinux内核的do_new_mount函数判断SD卡分区;数据结构存储模块,与所述分区判断模块相连,用于将SD卡的vfsmount数据结构以全局变量的形式存储。
[0016]如上所述,本发明的一种通过内核结束使用SD卡进程的方法及系统,具有以下有益效果:
[0017]本发明仅需要内核加锁并遍历所有进程,找出使用SD卡的进程,对该进程发出强制关闭信号,从而结束该进程。当所有使用SD卡的进程结束后,就可成功卸载SD卡,从而计算机可以访问该SD卡存储区。本发明简单高效,具有较强的通用性和实用性。
【附图说明】
[0018]图1显示为本发明的通过内核结束使用SD卡进程的方法的流程示意图。
[0019]图2显示为本发明的通过内核结束使用SD卡进程的方法中装载过程流程示意图。
[0020]图3显示为本发明的通过内核结束使用SD卡进程的系统的结构示意图。
[0021]图4显示为本发明的通过内核结束使用SD卡进程的系统的一种优选结构示意图。
[0022]元件标号说明
[0023]I通过内核结束使用SD卡进程的系统
[0024]11加锁模块
[0025]12遍历模块
[0026]13判断模块
[0027]14进程结束模块
[0028]15查看模块
[0029]16分区判断模块
[0030]17数据结构存储模块
[0031]Sll ?S16 步骤
[0032]S21 ?S22 步骤
【具体实施方式】
[0033]以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的【具体实施方式】加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。
[0034]本发明的目的在于提供一种通过内核结束使用SD卡进程的方法及系统,用于解决现有技术中结束使用SD卡进程的中存在可能产生新进程和不能有效关闭使用SD卡进程的问题。以下将详细阐述本发明的一种通过内核结束使用SD卡进程的方法及系统的原理及实施方式,使本领域技术人员不需要创造性劳动即可理解本发明的一种通过内核结束使用SD卡进程的方法及系统。
[0035]本实施例提供一种通过内核结束使用SD卡进程的方法及系统,仅需要内核加锁遍历所有进程,找出使用SD卡的进程,对该进程发出强制关闭信号,从而结束该进程。当所有使用SD卡的进程结束后,就可成功卸载SD卡。
[0036]Android是基于Iinux内核的移动操作系统,每当一块存储区(EMMC分区或者NAND分区)mount到文件系统中时,内核都会分配一个vfsmount数据结构。进程每打开一个文件,就会分配一个file_struct数据结构,该结构中的指向文件所在分区的vfsmount指针,同时进程的文件系统数据结构也有指向当前使用的分区的vf smount指针。在umountSD卡分区的时候,通过判断进程打开的文件中的vfsmount指针和file_struct结构中的vfsmount指针是否指向SD卡的vfsmount结构,就可知该进程是否使用了 SD卡,如果是,则对该进程发出结束进程信号,同时附带SEND_SIG_F0RCED标志,强制结束该进程。所有使用SD卡的进程结束后,就可以卸载SD卡。
[0037]本实施例提供一种通过内核结束使用SD卡进程的方法,用于结束使用Iinux内核的移动终端内的SD卡的进程,具体地,如图1所示,所述通过内核结束使用SD卡进程的方法包括以下步骤。
[0038]步骤S11,遍历进程链表;具体地,在执行步骤Sll前,所述通过内核结束使用SD卡进程的方法还包括:在遍历进程链表前,对所述进程链表加锁。
[0039]步骤S12,判断链表中的进程的目录是否为SD卡,具体地,在本实施例中,通过查看进程的file_StruCt数据结构判断链表中的进程的目录是否为SD卡。
[0040]其中,所述目录为进程的根目录或当前目录。若是,则接着执行步骤S13,若否则接着执行步骤S14。
[0041]在步骤S13中,向目录为SD卡的进程发出结束进程信号,以结束该进程。
[0042]步骤S14,继续判断进程打开的文件列表中是否有vfsmount指针指向SD卡的vfsmount数据结构,若是,则向目录为SD卡的进程发出结束进程信号,以结束该进程。若否,则说明当前进程没有使用SD卡。接着执行步骤S15。
[0043]在步骤S15中,判断进程链表中进程是否遍历完毕,若是则执行步骤S16,解锁链表。若否则返回继续执行步骤S12。
[0044]在实施本发明的方法前,如图2所示,还包括以下步骤。
[0045]步骤S21,通过