利用进程文件系统标记程序进程的方法、装置和设备与流程

文档序号:15215898发布日期:2018-08-21 16:51阅读:173来源:国知局

本发明涉及网络技术领域,尤指一种linux系统中利用进程文件系统(procfs)标记程序进程的方法、装置和设备。



背景技术:

linux主机上经常需要运行多个超文本预处理器(hypertextpreprocessor,php)的cli程序,即产生多个php进程。每个进程带有自己的进程标识(pid)。经常地,出于管理需要,可能需要通过外部或让php自身对相关进程进行标识。例如区分不同的项目等,都需要这种机制。

目前通用的标记php进程方法主要有以下几种:

1、使用不同的用户标识(uid或gid)来标识不同的进程,或者,在支持控制族群(cgroup)的基础上,使用不同的cgroup来标识不同的进程。但这种方式不是随处可用的。例如,系统并不支持cgroup,或者,系统的同一个用户运行了大量的进程等等情况下,将不能通过这种方式对不同的进程进行标识,因此这种方式的应用场景比较受限。

2、使用不同的路径,通过查找路径的方法推断相关标识,路径不同的进程,认为是不同的进程。但这种方式,用户可能调用用于改变当前工作目录的chdir函数(用来将当前的工作目录改变成指定的目录)或类似的机制改变当前目录,从而导致路径和进程的对应关系可能并不唯一,因此不能有效的实现对不同进程的标记。

3、通过日志或类似的方法,将相关标识存储在其他地方,需要关联时再通过pid查询,从而实现区分不同的进程。但这种方式,由于日志具有不可靠性,例如旧的日志可能会被删除,或者正需要管理时日志或类似的服务不可用,或者日志正在更新等等,同时也可能出现日志服务开销过大、管理困难等问题,因此,也不能有效的实现对不同进程的标记。

由此可见,现有技术中用于标记进程的方法,程序无法有效地标记自身,或者启动后就无法方便地修改标识,其查表的方式也不是很方便处理。因此,现有技术中没有有效的标记进程的方式,不能有效的实现对进程的标记。



技术实现要素:

本发明实施例提供一种利用进程文件系统标记php进程的方法、装置和设备,用以解决现有技术中存在的不能有效的标记php进程的问题。

一方面,本发明实施例提供了一种利用进程文件系统标记php进程的方法,包括:

针对需要静态标记的程序,在程序启动前,在环境变量中写入标记变量,在被静态标记的程序开始运行前,在当前进程环境变量列表中读取所述环境变量,从所述环境变量的标记变量字段中读出程序进程标识,再启动被标记的程序进程;

针对需要动态标记的程序,在程序中载入预先设置的程序标记代码,通过载入的程序标记代码打开约定目录中指定文件名称的标记文件,查找程序进程已打开的文件列表中该标记文件的链接。

在一些可选的实施例中,所述在程序启动前,在环境变量中写入标记变量,包括:

在程序启动前,通过shell脚本写入键值形式的标记变量;或者将标记变量写在周期性执行的工作排程crontab文件中;或者将标记变量写到对应的系统守护进程systemd配置文件中。

在一些可选的实施例中,所述在程序中载入预先设置的程序标记代码,包括:

预先提供程序标记代码,所述程序标记代码提供动态标记的应用程序编程接口api,包括创建标记、删除标记中的至少一个;

在程序中载入预先提供的所述程序标记代码。

在一些可选的实施例中,上述方法,还包括:

当需要查找程序进程的标记时,遍历所有符合设定条件的程序进程,读取环境变量文件,查找预先写入的程序进程标识;

遍历所有符合设定条件的程序进程,读取程序进程已打开的文件列表中的指定文件名称的标记文件的链接,通过读取的链接找到对应的指定文件名称的标记文件。

在一些可选的实施例中,上述方法,还包括:

根据已打开的文件列表,对已打开的文件进行文件寻址偏移操作,找到标记文件的偏移地址。

本发明实施例还提供一种利用进程文件系统标记程序进程的装置,包括:

静态标记模块,用于针对需要静态标记的程序,在程序启动前,在环境变量中写入标记变量,在被静态标记的程序开始运行前,在当前进程环境变量列表中读取所述环境变量,从所述环境变量的标记变量字段中读出程序进程标识,再启动被标记的程序进程;

动态标记模块,用于针对需要动态标记的程序,在程序中载入预先设置的程序标记代码,通过载入的程序标记代码打开约定目录中指定文件名称的标记文件,查找程序进程已打开的文件列表中该标记文件的链接。

在一些可选的实施例中,所述静态标记模块,具体用于:

在程序启动前,通过shell脚本写入键值形式的标记变量;或者将标记变量写在周期性执行的工作排程crontab文件中;或者将标记变量写到对应的系统守护进程systemd配置文件中。

在一些可选的实施例中,所述动态标记模块,具体用于:

预先提供程序标记代码,所述程序标记代码提供动态标记的应用程序编程接口api,包括创建标记、删除标记中的至少一个;

在程序中载入预先提供的所述程序标记代码。

在一些可选的实施例中,上述装置,还包括:

标识获取模块,用于当需要查找程序进程的标记时,遍历所有符合设定条件的程序进程,读取环境变量文件,查找预先写入的程序进程标识;遍历所有符合设定条件的程序进程,读取程序进程已打开的文件列表中的指定文件名称的标记文件的链接,通过读取的链接找到对应的指定文件名称的标记文件。

在一些可选的实施例中,所述动态标记模块,还用于:

根据已打开的文件列表,对已打开的文件进行文件寻址偏移操作,找到标记文件的偏移地址。

本发明实施例还提供一种主机设备,包括:如上述的利用进程文件系统标记程序进程的装置。

本发明实施例还一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,所述计算机可执行指令用于执行上述的利用进程文件系统标记程序进程的方法。

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

可以通过启动前在程序中写入标记变量,启动前在环境变量中对进程进行标识,实现静态标记,也可以通过在程序中载入程序标记代码,实现通过文件名导向标记文件,方便的对进程进行标记,该方法能够方便的对程序进程进行标记,不受限于进程所支持的类型,对于没有控制族群标识的进程也能进行有效标记,不需要日志进行关联查询,不受日志删除和更新的影响,通用性强,查找方便,能够有效地对进程进行标记识别。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例中利用进程文件系统标记程序进程的方法的流程图;

图2是本发明实施例中获取程序进程标记的流程图;

图3是本发明实施例中利用进程文件系统标记程序进程的装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了解决现有技术中存在的不能有效的对程序进程进行标记的问题,本发明实施例提供一种利用进程文件系统标记程序进程的方法,能够在linux上利用procfs标记程序进程,不受限于进程所支持的类型,通用性强,查找方便,能够有效地对进程进行标记识别。

在许多类unix计算机系统中,进程文件系统(theprocfilesystem,procfs)包含一个伪文件系统,该系统是启动时动态生成的文件系统,用于通过内核访问进程信息。这个文件系统通常被挂载到/proc目录,由于/proc不是一个真正的文件系统,它也就不占用存储空间,只是占用有限的内存。本发明利用进程文件系统来对程序进程进行标记,下面通过具体的实施例进行详细描述。

本发明实施例提供的利用进程文件系统标记程序进程的方法,其流程如图1所示,包括如下步骤:

步骤s101:针对需要静态标记的程序,在程序启动前,在环境变量中写入标记变量。

静态标记可以方便高效的完成,且不易受到程序本身的影响。在程序启动前,通过shell脚本写入键值形式的标记变量,或者将标记脚本写在周期性执行的工作排程(crontab)文件中,或者将标记变量写到对应的系统守护进程(systemdaemon,systemd)配置文件中。

其中,通过shell脚本写入键值形式的标记变量,可以是将键-值形式的bash脚本写入环境变量中。

例如:在程序启动前,使用var_somekey=somevalue形式的bash脚本,或者直接写在crontab中,对进程进行标记。环境变量中即存在了var_somekey的变量,之后再在此环境中启动待标记的程序,则刚刚被启动的待标记程序也会继承环境变量;

bash(bourne-againshell)是一个为革奴(gnu)计划编写的unixshell。crontab命令常见于unix和类unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。

步骤s102:在被静态标记的程序开始运行前,在当前进程环境变量列表中读取环境变量,从环境变量的标记变量字段中读出程序进程标识,再启动被标记的程序进程。

被标记程序开始运行前,即可在当前进程环境变量的列表/proc/<pid>/environ中读到相关的环境变量,从环境变量的标记变量字段中读出程序进程标识,其中标识参数<pid>替换为进程的标识pid。例如:替换<pid>的pid是355的话,形如/proc/355/environ的文件可以拿到前述的结果。然后再启动被标记的程序进程。

步骤s103:针对需要动态标记的程序,在程序中载入预先设置的程序标记代码。

对于需要进行动态标记的程序,预先提供程序标记代码,所述程序标记代码提供动态标记的应用程序编程接口(api),包括创建标记、删除标记中的至少一个;在程序中载入预先提供的程序标记代码。程序标记代码可以是php标记类。

也就是说,对于需要动态标记的程序,提供一个php类,需要标记的程序将此类载入,此类提供动态标记的一些api,如创建、删除标记。

步骤s104:通过载入的程序标记代码打开约定目录中指定文件名称的标记文件,查找程序进程已打开的文件列表中该标记文件的链接。

需要对应用程序进行标记时,可以约定一个业务不常用的目录,并且由前述的标记代码(模块)打开这个目录中的特定名称的文件,即可在/proc/<pid>/fd/下找到该文件的链接,例如可以打开/tmp/nonuseddirformark/abc_somevalue这个链接。

可以根据已打开的文件列表,对已打开的文件进行文件寻址偏移操作,找到标记文件的偏移地址。即可以根据已打开的文件列表中已打开文件的信息,找到相关标记文件的偏移地址,比如:可以将打开的文件进行文件寻址偏移操作,寻址到一个指定的地址,即为标记文件的偏移地址。

这里与现有技术中将内容存储在其他地方不同的是,本申请中提出的特定名称的文件,有效的仅仅是其文件名,文件本身可以不存在于相应目录中,也不需要向文件本身写入任何内容。因此,不需要获取文件本身,只需要获取名称即可,简便了操作,减少了存储数据量,也减少了数据传输量。

可选地,可以将打开的文件进行文件寻址偏移操作,寻址到一个指定的地址。可以根据已打开的文件信息,找到相关标记文件的偏移地址。

上述方法,既可以采用静态标记的方式对程序进程进行标记,也可以采用动态标记的方式对程序进程进行标记,或者两者结合。其对程序进程能够进行有效的标记,且能够保证标记和进程的对应关系。需要被标记的进程可以是php进程,也可以是其它程序进程。

本发明实施例提供的利用进程文件系统标记程序进程的方法,还包括获取程序进程标记的过程,其流程如图2所示,包括如下步骤:

步骤s201:当需要查找程序进程的标记时,遍历所有符合设定条件的程序进程。

因为静态标记时将标记信息写入了环境变量中,因此,需要查找相关标记时,遍历程序进程获取环境变量中的相关标记变量信息,来查找程序进程标记。

例如:符合设定条件的程序进程,可以是指定某个用户的某个标记进程,则设定条件为进程属于这个用户。

步骤s202:读取环境变量文件,查找预先写入的程序进程标识。

遍历相关程序进程,读取其环境变量(environ),可以从environ中读取到启动前写入的静态标记。

例如:如果程序使用了前述静态标记过程中描述的var_somekey=somevalue形式的bash脚本标记,则可以看到形如var_somekey=somevalue的内容。

又例如:如果程序使用了前述静态标记过程中描述的crontab方式进行标记,则可以在crontab只不过查找到相关内容。

步骤s203:遍历所有符合设定条件的程序进程。

因为动态标记时,在程序中载入了程序标记代码,因此,可以遍历符合设定条件的相关程序进程,读取其fd目录中的链接,来获取标记文件的链接。其中,fd目录包含了进程打开的每一个文件的链接。

步骤s204:读取程序进程已打开的文件列表中指定文件名称的标记文件的链接,通过读取的链接找到对应的指定文件名称的标记文件。

可以从fd目录中找到指向标记文件的链接,即如果程序使用了前述动态标记描述中所例举的标记,可以找到指向/tmp/nonuseddirformark/abc_somevalue的链接。

基于同一发明构思,本发明实施例还提供一种利用进程文件系统标记程序进程的装置,该装置可以设置主机设备中,其结构如图3所示,包括:静态标记模块301和动态标记模块302。

静态标记模块301,用于针对需要静态标记的程序,在程序启动前,在环境变量中写入标记变量,在被静态标记的程序开始运行前,在当前进程环境变量列表中读取所述环境变量,从所述环境变量的标记变量字段中读出程序进程标识,再启动被标记的程序进程;

动态标记模块302,用于针对需要动态标记的程序,在程序中载入预先设置的程序标记代码,通过载入的程序标记代码打开约定目录中指定文件名称的标记文件,查找程序进程已打开的文件列表中该标记文件的链接。

可选的,静态标记模块301,具体用于:

在程序启动前,通过shell脚本写入键值形式的标记变量,或者将标记变量写在周期性执行的工作排程crontab文件中,或者将标记变量写到对应的系统守护进程systemd配置文件中。

可选的,动态标记模块302,具体用于:

预先提供程序标记代码,所述程序标记代码提供动态标记的应用程序编程接口api,包括创建标记、删除标记中的至少一个;

在程序中载入预先提供的所述程序标记代码。

可选的,动态标记模块302,还用于:根据已打开的文件信息,对已打开的文件进行文件寻址偏移操作,找到标记文件的偏移地址。

可选的,上述装置,还包括:

标识获取模块303,用于当需要查找程序进程的标记时,遍历所有符合设定条件的程序进程,读取环境变量文件,查找预先写入的程序进程标识;遍历所有符合设定条件的程序进程,读取程序进程已打开的文件列表中的指定文件名称的标记文件的链接,通过读取的链接找到对应的指定文件名称的标记文件。

本发明实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机可执行指令,计算机可执行指令用于上述的利用进程文件系统标记程序进程的方法。

上述利用进程文件系统标记程序进程的方法,可以实现在linux上利用procfs标记程序进程,例如php进程,相关标识可以在fork后得以保存,并不会丢失;相关标识不影响正常业务;方便使用,可以用于各种语言的程序,也可以使用多种语言处理相关标识,还可以轻松添加到crontab中使程序启动时就持有特定的标识。

fork函数计算机程序设计中的分叉函数,若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。

本领域技术人员还可以了解到本发明实施例列出的各种说明性逻辑块(illustrativelogicalblock),单元,和步骤可以通过电子硬件、电脑软件,或两者的结合进行实现。为清楚展示硬件和软件的可替换性(interchangeability),上述的各种说明性部件(illustrativecomponents),单元和步骤已经通用地描述了它们的功能。这样的功能是通过硬件还是软件来实现取决于特定的应用和整个系统的设计要求。本领域技术人员可以对于每种特定的应用,可以使用各种方法实现所述的功能,但这种实现不应被理解为超出本发明实施例保护的范围。

本发明实施例中所描述的各种说明性的逻辑块,或单元都可以通过通用处理器,数字信号处理器,专用集成电路(asic),现场可编程门阵列或其它可编程逻辑装置,离散门或晶体管逻辑,离散硬件部件,或上述任何组合的设计来实现或操作所描述的功能。通用处理器可以为微处理器,可选地,该通用处理器也可以为任何传统的处理器、控制器、微控制器或状态机。处理器也可以通过计算装置的组合来实现,例如数字信号处理器和微处理器,多个微处理器,一个或多个微处理器联合一个数字信号处理器核,或任何其它类似的配置来实现。

本发明实施例中所描述的方法或算法的步骤可以直接嵌入硬件、处理器执行的软件模块、或者这两者的结合。软件模块可以存储于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、可移动磁盘、cd-rom或本领域中其它任意形式的存储媒介中。示例性地,存储媒介可以与处理器连接,以使得处理器可以从存储媒介中读取信息,并可以向存储媒介存写信息。可选地,存储媒介还可以集成到处理器中。处理器和存储媒介可以设置于asic中,asic可以设置于用户终端中。可选地,处理器和存储媒介也可以设置于用户终端中的不同的部件中。

在一个或多个示例性的设计中,本发明实施例所描述的上述功能可以在硬件、软件、固件或这三者的任意组合来实现。如果在软件中实现,这些功能可以存储与电脑可读的媒介上,或以一个或多个指令或代码形式传输于电脑可读的媒介上。电脑可读媒介包括电脑存储媒介和便于使得让电脑程序从一个地方转移到其它地方的通信媒介。存储媒介可以是任何通用或特殊电脑可以接入访问的可用媒体。例如,这样的电脑可读媒体可以包括但不限于ram、rom、eeprom、cd-rom或其它光盘存储、磁盘存储或其它磁性存储装置,或其它任何可以用于承载或存储以指令或数据结构和其它可被通用或特殊电脑、或通用或特殊处理器读取形式的程序代码的媒介。此外,任何连接都可以被适当地定义为电脑可读媒介,例如,如果软件是从一个网站站点、服务器或其它远程资源通过一个同轴电缆、光纤电缆、双绞线、数字用户线(dsl)或以例如红外、无线和微波等无线方式传输的也被包含在所定义的电脑可读媒介中。所述的碟片(disk)和磁盘(disc)包括压缩磁盘、镭射盘、光盘、dvd、软盘和蓝光光盘,磁盘通常以磁性复制数据,而碟片通常以激光进行光学复制数据。上述的组合也可以包含在电脑可读媒介中。

以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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