多用户进程互斥方法及装置与流程

文档序号:12463710阅读:324来源:国知局
多用户进程互斥方法及装置与流程

本发明涉及计算机技术领域,特别是涉及一种多用户进程互斥方法及装置。



背景技术:

大多数应用软件(Application Software)不支持多用户运行,例如在端口绑定、需要使用临界资源的情况下,应用软件如果绑定了固定端口,当多个用户运行该应用软件的程序,就会反复绑定这个端口,第一个绑定会成功,其后的绑定都会失败。临界资源有可能被第一个用户占用,其他用户则无法使用。此时如果用户运行该应用软件的程序,软件会出现端口绑定失败导致的通信失败的现象;同时临界资源被占用会导致应用软件出现死锁、初始化失败等异常现象。

为了应对上述现象,目前传统的解决方案是采用互斥锁。但在实现过程中,发明人发现传统技术至少存在如下问题:

由于系互斥锁必须要管理员权限,普通权限用户无法检测到互斥锁,进而也无法实现多用户进程互斥。即互斥锁存在不适用于普通权限用户的缺陷。



技术实现要素:

基于此,有必要针对由于传统互斥锁不适用于普通权限用户,导致普通权限用户无法实现多用户进程互斥的问题,提供一种多用户进程互斥方法及装置。

为了实现上述目的,本发明技术方案的实施例为:

一方面,提供了一种多用户进程互斥方法,包括以下步骤:

在进程实例启动时,若检测到当前本地进程中无具名互斥锁,读取应用程序配置文件中的启动项配置信息;

获取启动项配置信息中的启动项配置逻辑值;

根据启动项配置逻辑值,判断当前本地进程中是否存在多用户运行;

在判断的结果为否时,运行进程实例。

另一方面,提供了一种多用户进程互斥装置,包括:

读取检测单元,用于在进程实例启动时,若检测到当前本地进程中无具名互斥锁,读取应用程序配置文件中的启动项配置信息;

逻辑值获取单元,用于获取启动项配置信息中的启动项配置逻辑值;

判断单元,用于根据启动项配置逻辑值,判断当前本地进程中是否存在多用户运行;

运行单元,用于在判断的结果为否时,运行进程实例。

上述技术方案具有如下有益效果:

本发明多用户进程互斥方法及装置,在采用互斥锁的基础上,通过记录配置文件和进程检测双重机制,来检测出应用程序是否处于多用户运行状态,进而实现多用户进程互斥,可以解决非系统管理员权限下的多用户进程互斥,防止因设置配置文件有可能写入出错出现的问题。本发明能够解决传统进程互斥锁无法满足多用户情况下的进程互斥的问题;通过本发明,可以有效的解决应用程序退出时可能会非正常退出或同一台电脑上也可能存在不同的程序,拥有相同的进程名等情况对多用户进程互斥方案的干扰。

附图说明

图1为本发明多用户进程互斥方法实施例1的流程示意图;

图2为本发明多用户进程互斥方法实施例2的流程示意图;

图3为本发明多用户进程互斥装置实施例1的结构示意图。

具体实施方式

为了便于理解本发明,下面将参照相关附图对本发明进行更全面的描述。附图中给出了本发明的首选实施例。但是,本发明可以以许多不同的形式来实现,并不限于本文所描述的实施例。相反地,提供这些实施例的目的是使对本发明的公开内容更加透彻全面。

除非另有定义,本文所使用的所有的技术和科学术语与属于本发明的技术领域的技术人员通常理解的含义相同。本文中在本发明的说明书中所使用的术语只是为了描述具体的实施例的目的,不是旨在于限制本发明。本文所使用的术语“及/或”包括一个或多个相关的所列项目的任意的和所有的组合。

本发明多用户进程互斥方法实施例1:

为了解决由于传统互斥锁不适用于普通权限用户,导致普通权限用户无法实现多用户进程互斥的问题,本发明提供了一种多用户进程互斥方法实施例1;图1为本发明多用户进程互斥方法实施例1的流程示意图;如图1所示,可以包括以下步骤:

步骤S110:在进程实例启动时,若检测到当前本地进程中无具名互斥锁,读取应用程序配置文件中的启动项配置信息;

步骤S120:获取启动项配置信息中的启动项配置逻辑值;

步骤S130:根据启动项配置逻辑值,判断当前本地进程中是否存在多用户运行;

步骤S140:在判断的结果为否时,运行进程实例。

具体而言,本发明可以在Windows系统或Linux系统下实现,同时,在更换相关程序函数后也可在其它类型的系统下实现。其中,具名互斥锁可以指应用软件通过相关程序函数生成的具有名字的互斥锁;本发明各实施例中提到的互斥锁即通用进程互斥锁,可以包括系统全局互斥锁(Global Mutex);具名互斥锁能够保证在当前用户下同一时间最多运行一个实例,不具名的互斥锁是做不到这一点的。

本发明各实施例中提到的进程(即当前本地进程)可以指应用程序的一个执行过程,而进程实例可以指一个运行的程序。本发明通过在进程实例启动时,若检测到当前本地进程中无具名互斥锁,来确认在当前用户下,本地进程中是否有正在运行的进程实例;若存在具名互斥锁,说明有进程实例正在运行,应用程序可以退出本次启动的进程实例。

进一步的,在单用户情况下,本发明各实施例可以通过互斥锁(即上述具名互斥锁)来判断是否有实例正在运行;但是,在多用户情况下,互斥锁需要系统管理员权限,而普通用户没有权限,无法通过互斥锁来判断是否有进程实例正在运行。因此本发明实施例1通过步骤S120~S140的方法来判断当前本地进程中是否存在多用户运行。由于进程检测无法解决非系统管理员权限下的多用户进程互斥,而设置配置文件存在写入出错的问题,而本发明各实施例的方法提供了一种双重保障机制。

在一个具体的实施例中,若检测到当前本地进程中无具名互斥锁的步骤之前包括步骤:

调用创建互斥锁函数生成具名互斥锁,获取应用程序编程接口函数根据具名互斥锁反馈的返回值。

若检测到当前本地进程中无具名互斥锁的步骤包括:

在返回值为互斥锁已存在错误码时,确定当前本地进程中存在具名互斥锁。

具体而言,以Windows系统为例,可以在进程实例启动时,调用系统API(Application Programming Interface:应用程序编程接口)函数生成一个具有名字的互斥锁(即具名互斥锁),并检测返回值;如果返回值为ERROR_ALREADY_EXISTS(互斥锁已存在错误码),表明程序的另一个进程实例正在运行,程序该实例退出;否则,读取应用程序配置文件中的启动项配置信息。

在一个具体的实施例中,根据启动项配置逻辑值,判断当前本地进程中是否存在多用户运行的步骤包括:

在启动项配置逻辑值为False时,确定当前本地进程中不存在多用户运行;

在启动项配置逻辑值为True时,扫描当前本地进程,获取本地进程快照;遍历本地进程快照,在遍历的结果为本地进程快照中不存在相同进程名时,确定当前本地进程中不存在多用户运行。

具体而言,以Windows系统为例,可以从程序配置文件config.ini中读出Launch(启动)配置信息。并检测Launch配置为true或false;一般来说,Launch项的设置只可能是两个值true或者false,可以使用字符串匹配来进行判断

如果Launch为false,说明没有程序不存在其他实例正在运行,即不存在多用户运行,可以运行本次的进程实例;如果Launch为true,可以调用系统API函数扫描本地进程,获取本地进程快照,同时遍历本地进程快照。

通过遍历本地进程快照,可以判断是否存在多个相同进程名,如果存在多个相同进程名,表明程序的另一个进程实例正在运行,程序该实例退出;否则,表明程序不存在多用户运行实例。

在一个具体的实施例中,在判断的结果为否时,运行进程实例的步骤包括:

将启动项配置逻辑值配置为True,运行进程实例。、

具体而言,应用程序第一个启动的进程实例将Launch设置为true,再次启动该应用程序的进程实例时,会发现Launch已经被设为true,这表明已经有进程实例在运行,这个应用程序就可以自动退出。

在一个具体的实施例中,在判断的结果为否时,运行进程实例的步骤之后还包括步骤:

在进程实例运行结束退出时,将启动项配置逻辑值配置为False。

具体而言,应用程序第一个启动的进程实例在退出时将Launch设为false,这样下一个启动的进程实例,就可以正常运行,否则下一个启动的进程实例会发现Launch为true,该实例会自动退出。

本发明多用户进程互斥方法实施例1,在采用互斥锁的基础上,通过记录配置文件和进程检测双重机制,来检测出应用程序是否处于多用户运行状态,进而实现多用户进程互斥,可以解决非系统管理员权限下的多用户进程互斥,防止因设置配置文件有可能写入出错出现的问题。本发明能够解决传统进程互斥锁无法满足多用户情况下的进程互斥的问题;通过本发明,可以有效的解决应用程序退出时可能会非正常退出或同一台电脑上也可能存在不同的程序,拥有相同的进程名等情况对多用户进程互斥方案的干扰。

本发明多用户进程互斥方法实施例2:

为了解决由于传统互斥锁不适用于普通权限用户,导致普通权限用户无法实现多用户进程互斥的问题,本发明还提供了一种多用户进程互斥方法实施例2;以Windows系统为例,图2为本发明多用户进程互斥方法实施例2的流程示意图;如图2所示,可以包括以下步骤:

步骤S210:程序启动,调用系统API函数CreateMutex生成一个具有名字的互斥锁,调用系统API函数GetLastError,检测返回值是否为ERROR_ALREADY_EXISTS,如果返回值为ERROR_ALREADY_EXISTS,表明程序的另一个进程实例正在运行,程序该实例退出;否则,执行操作步骤S220。其中,图2中步骤S210中的Mutex指的是具名互斥锁,此步骤主要说明如何判断。

步骤S220:由于无法通过互斥锁来获取程序是否已经有实例正在运行,需要从程序配置文件config.ini中读出Launch配置信息。

步骤S230:检测Launch配置是否为true,如果Launch为false,说明没有程序不存在其他实例正在运行;如果Launch为true,执行操作步骤S240。

步骤S240:调用系统API函数CreateToolhelp32Snapshot,扫描本地进程,获取本地进程快照。

步骤S250:调用系统API函数Process32First和Process32Next,遍历本地进程快照。

步骤S260:通过遍历本地进程快照,判断是否存在多个相同进程名,如果存在多个相同进程名,表明程序的另一个进程实例正在运行,程序该实例退出;否则,表明程序不存在多用户运行实例。

步骤S270:向配置文件config.ini写入Launch为true,然后程序继续运行。

步骤S280:点击退出程序,在程序退出之前,向config.ini写入Launch为false,程序正常退出。

具体而言,可以通过应用程序的初始化模块调用系统API函数,其中:

1)API:Application Programming Interface,应用程序编程接口;

2)CreateMutex表示:创建互斥锁函数;

3)GetLastError:获取互斥锁错误码函数;

4)ERROR_ALREADY_EXISTS:互斥锁已存在错误码;

5)reateToolhelp32Snapshot:创建进程快照函数;

6)Process32First:遍历第一个进程函数;

7)Process32Next:遍历下一个进程函数;

此外,从程序配置文件config.ini中读出Launch配置信息时,编程语言一般都会提供文件读取函数,在C++中为fget函数,然后用字符串匹配读取项是否为Launch项。Launch项的设置只可能是两个值true或者false,只要使用字符串匹配就可以判断。在C++中为:if(launch==“true”)。

本发明多用户进程互斥方法实施例2在采用通用进程互斥锁的基础上,采用了设置配置文件和进程检测的双重保障机制。能够解决原有通用进程互斥锁无法满足多用户情况下的进程互斥;应用程序退出时可能会非正常退出,同一台电脑上也可能存在不同的程序,拥有相同的进程名的情况,采用读写配置文件和进程检测的双重保障机制,可以有效的排除这两种情况对多用户进程互斥方案的干扰。

本发明多用户进程互斥装置实施例1:

为了解决由于传统互斥锁不适用于普通权限用户,导致普通权限用户无法实现多用户进程互斥的问题,本发明还提供了一种多用户进程互斥装置实施例1;图3为本发明多用户进程互斥装置实施例1的结构示意图,如图3所示,可以包括:

读取检测单元310,用于在进程实例启动时,若检测到当前本地进程中无具名互斥锁,读取应用程序配置文件中的启动项配置信息;

逻辑值获取单元320,用于获取启动项配置信息中的启动项配置逻辑值;

判断单元330,用于根据启动项配置逻辑值,判断当前本地进程中是否存在多用户运行;

运行单元340,用于在判断的结果为否时,运行进程实例。

在一个具体的实施例中,读取检测单元310可以包括:

创建模块312,用于调用创建互斥锁函数生成具名互斥锁;

返回值获取模块314,用于获取应用程序编程接口函数根据具名互斥锁反馈的返回值。

检测模块316,用于在返回值为互斥锁已存在错误码时,确定当前本地进程中存在具名互斥锁。

在一个具体的实施例中,判断单元330可以包括:

扫描遍历模块332,用于在启动项配置逻辑值为True时,扫描当前本地进程,获取并遍历本地进程快照;

确定结果模块334,用于在启动项配置逻辑值为False时或在遍历的结果为本地进程快照中不存在相同进程名时,确定当前本地进程中不存在多用户运行。

在一个具体的实施例中,运行单元340,用于将启动项配置逻辑值配置为True,运行进程实例。

在一个具体的实施例中,运行单元340,用于在进程实例运行结束退出时,将启动项配置逻辑值配置为False。

本发明多用户进程互斥装置实施例1,在采用互斥锁的基础上,通过记录配置文件和进程检测双重机制,来检测出应用程序是否处于多用户运行状态,进而实现多用户进程互斥,可以解决非系统管理员权限下的多用户进程互斥,防止因设置配置文件有可能写入出错出现的问题。本发明能够解决传统进程互斥锁无法满足多用户情况下的进程互斥的问题;通过本发明,可以有效的解决应用程序退出时可能会非正常退出或同一台电脑上也可能存在不同的程序,拥有相同的进程名等情况对多用户进程互斥方案的干扰。

以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1