CN107025135B - Docker容器内应用进程管理方法、装置和介质 - Google Patents
Docker容器内应用进程管理方法、装置和介质 Download PDFInfo
- Publication number
- CN107025135B CN107025135B CN201710125107.2A CN201710125107A CN107025135B CN 107025135 B CN107025135 B CN 107025135B CN 201710125107 A CN201710125107 A CN 201710125107A CN 107025135 B CN107025135 B CN 107025135B
- Authority
- CN
- China
- Prior art keywords
- application
- application process
- initial
- sub
- pid
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/485—Task life-cycle, e.g. stopping, restarting, resuming execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Abstract
本发明的实施方式提供了一种Docker容器内应用进程管理方法,该方法包括:设置初始化进程;对所述初始化进程进行分叉操作,得到初始进程和第一子进程;在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给所述第一子进程以及所述第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,从而对所述第一子进程以及所述至少一个应用进程进行接管。通过对初始化进程进行分叉得到初始进程和子进程,以及初始进程利用系统信号注册和转发对子进程以及应用进程进行控制,本发明的方法使得应用进程可及时终止并可及时释放孤儿进程的资源。此外,本发明的实施方式提供了一种Docker容器内应用进程管理装置及计算机可读存储介质。
Description
技术领域
本发明的实施方式涉及互联网技术领域,更具体地,本发明的实施方式涉及Docker容器内应用进程管理方法、装置和计算机可读存储介质。
背景技术
本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
Docker容器是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。开发者在其开发环境测试通过的容器可以批量的在不同版本的Linux生产环境中部署,容器可以在Ubuntu,CentOS,RHEL等支持Docker容器的操作系统版本上运行。。
现有的Docker容器的使用都是直接在容器中启动单个进程,或者通过bin/bash–C的形式调用shell脚本启动多个进程。由于容器内运行的也是Linux系统,在容器内与常规Linux不同的是,容器不包含内核。由于容器启动时,第一个启动的进程的PID为1,而Linux系统对于PID为1的进程有一些特殊的处理,所以会出现诸如应用进程无法向外部发送信号而终止以及孤儿进程资源无法释放等问题。
发明内容
但是,出于系统对于第一个进程特殊处理的原因,现有技术会产生应用进程无法终止以及孤儿进程资源无法释放的问题。
因此在现有技术中,无法对应用进程进行有效接管,这是非常令人烦恼的过程。
为此,非常需要一种改进的Docker容器内应用进程管理方法,以使应用进程可以通过系统信号进行终止,并且可及时释放孤儿进程的资源。
在本上下文中,本发明的实施方式期望提供一种Docker容器内应用进程管理方法、装置及计算机可读存储介质。
在本发明实施方式的第一方面中,提供了一种Docker容器内应用进程管理方法,包括:设置初始化进程;对所述初始化进程进行分叉操作,得到初始进程和第一子进程;在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给所述第一子进程以及所述第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,从而对所述第一子进程以及所述至少一个应用进程进行接管。
在本发明的一个实施例中,该Docker容器内应用进程管理方法还包括:在初始进程记录第一子进程以及所述至少一个应用进程的PID;所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第一子进程和所述至少一个应用进程。
在本发明的一个实施例中,在所述初始进程将系统信号转发给所述第一子进程和所述至少一个应用进程之后,该Docker容器内应用进程管理方法还包括:所述初始进程监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;如果所述初始进程监听到与所述第一子进程或所述应用进程关联的SIGCHILD信号,则对所述第一子进程或所述应用进程的资源进行回收处理。
在本发明的一个实施例中,该Docker容器内应用进程管理方法包括:设置所述初始进程的PID为1。
在本发明的一个实施例中,该Docker容器内应用进程管理方法包括:还包括:在所述第一子进程进行环境分离操作,并载入应用初始化脚本,从而在所述第一子进程执行系统调用,将所述至少一个应用进程载入到所述Docker容器内。
在本发明的一个实施例中,还包括:对其中一个应用进程进行分叉操作,得到互为父子关系的第一应用进程和第二应用进程,或者,在其中一个应用进程中启动另一个应用进程,得到互为父子关系的第一应用进程和第二应用进程。
在本发明的一个实施例中,还包括:所述初始进程记录所述第二应用进程的PID,所述第二应用进程是所述第一应用进程的子进程;所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第二应用进程。
在本发明的一个实施例中,还包括:当所述第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程。
在本发明的一个实施例中,还包括:所述初始进程监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;如果所述初始进程监听到所述第二应用进程关联的SIGCHILD信号,则对所述第二应用进程的资源进行回收处理。
在本发明实施方式的第二方面中,提供了一种Docker容器内应用进程管理装置,包括:初始化单元,用于设置初始化进程;分叉操作单元,用于对所述初始化进程进行分叉操作,得到初始进程和第一子进程;初始进程操作单元,用于在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给所述第一子进程以及所述第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,从而对所述第一子进程以及所述至少一个应用进程进行接管。
在本发明的一个实施例中,该Docker容器内应用进程管理装置中,所述初始进程操作单元还用于:在初始进程记录第一子进程以及所述至少一个应用进程的PID;所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第一子进程和所述至少一个应用进程。
在本发明的一个实施例中,该Docker容器内应用进程管理装置中,所述初始进程操作单元还用于:监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;所述装置还包括:资源释放单元,用于当监听到与所述第一子进程或所述应用进程关联的SIGCHILD信号时,对所述第一子进程或所述应用进程的资源进行回收处理。
在本发明的一个实施例中,该Docker容器内应用进程管理装置还包括:子进程操作单元,用于在所述第一子进程进行环境分离操作,并载入应用初始化脚本,从而在所述第一子进程执行系统调用,将所述至少一个应用进程载入到所述Docker容器内。
在本发明的一个实施例中,还包括:应用进程处理单元,用于对其中一个应用进程进行分叉操作,得到互为父子关系的第一应用进程和第二应用进程,或者,在其中一个应用进程中启动另一个应用进程,得到互为父子关系的第一应用进程和第二应用进程。
在本发明的一个实施例中,所述初始进程操作单元还用于:记录所述第二应用进程的PID,所述第二应用进程是所述第一应用进程的子进程;通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第二应用进程。
在本发明的一个实施例中,所述应用进程处理单元还用于,当所述第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程。
在本发明的一个实施例中,所述初始进程操作单元还用于:监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;所述装置还包括:资源释放单元,用于当监听到与所述第二应用进程关联的SIGCHILD信号时,对所述第二应用进程的资源进行回收处理。
在本发明实施方式的第三方面中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现Docker容器内应用进程管理方法的步骤:设置初始化进程;对所述初始化进程进行分叉操作,得到初始进程和第一子进程;在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给所述第一子进程以及所述第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,从而对所述第一子进程以及所述至少一个应用进程进行接管。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法还包括:在初始进程记录第一子进程以及所述至少一个应用进程的PID;所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第一子进程和所述至少一个应用进程。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法还包括:在所述初始进程将系统信号转发给所述第一子进程和所述至少一个应用进程之后,所述初始进程监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;如果所述初始进程监听到与所述第一子进程或所述应用进程关联的SIGCHILD信号,则对所述第一子进程或所述应用进程的资源进行回收处理。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法包括:设置所述初始进程的PID为1。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法包括:还包括:在所述第一子进程进行环境分离操作,并载入应用初始化脚本,从而在所述第一子进程执行系统调用,将所述至少一个应用进程载入到所述Docker容器内。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法还包括:对其中一个应用进程进行分叉操作,得到互为父子关系的第一应用进程和第二应用进程,或者,在其中一个应用进程中启动另一个应用进程,得到互为父子关系的第一应用进程和第二应用进程。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法还包括:所述初始进程记录所述第二应用进程的PID,所述第二应用进程是所述第一应用进程的子进程;所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第二应用进程。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法还包括:当所述第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程。
在本发明的一个实施例中,该计算机可读存储介质所执行的Docker容器内应用进程管理方法还包括:所述初始进程监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;如果所述初始进程监听到所述第二应用进程关联的SIGCHILD信号,则对所述第二应用进程的资源进行回收处理。
本发明实施例提供的方案相对于现有的技术方案,至少存在如下技术效果:
1、通过将Docker容器所支持的应用进程中第一个应用进程设置为初始化进程,并将该初始化进程分叉成为初始进程和第一子进程,并由该初始进程进行系统信号注册和转发,第一子进程和应用进程能有效的接收和处理系统信号,且初始进程能够接收到与第一子进程和应用进程关联的系统信号,能够避免出现应用进程无法通过向外部发送信号导致无法控制其终止的问题。
2、通过初始化进程的分叉操作,由于初始进程在容器内PID为1,当系统产生孤儿进程时,容器运行所处LINUX环境的LINUX内核会将该孤儿进程交给PID为1的初始进程进行接管,从而避免孤儿进程资源泄漏问题。
3、由于初始进程循环等待第一子进程和应用进程的退出信号,从而可有效避免第一子进程和应用进程出现僵尸进程的问题。
附图说明
通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:
图1示意性地示出了根据本发明实施方式的Docker容器内应用进程管理系统示意图;
图2示意性地示出了根据本发明一实施例的Docker容器内应用进程管理方法流程图;
图3示意性地示出了根据本发明一实施例的Docker容器内应用进程管理装置结构示意图;
图4示意性地示出了根据本发明一实施例的Docker容器内应用进程管理设备的结构示意图;
图5示意性地示出了根据本发明一实施例的Docker容器内应用进程管理的程序产品的示意图
在附图中,相同或对应的标号表示相同或对应的部分。
具体实施方式
下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。
根据本发明的实施方式,提出了一种Docker容器内应用进程管理方法和计算机可读存储介质。
在本文中,需要理解的是,对所涉及的术语解释如下:
虚拟化:虚拟化是为一些组件创建基于软件的或虚拟(而不是物理)表现形式的过程。虚拟化可以应用于应用、服务器、存储和网络,它是一种可以为所有规模的企业降低IT开销,同时提高效率和敏捷性的有效方式。
Docker容器:Docker是一种虚拟化技术,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到流行的Linux机器上;Docker容器是Docker技术运行的单元。
进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。
PID:Linux进程总是会分配一个号码用于在其命名空间中唯一地标识它们。该号码被称作进程ID号,简称PID。PID在系统内唯一。
孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。
此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。
下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。
发明概述
本发明人发现,由于容器启动时,第一个启动的进程的PID为1,而Linux系统对于PID为1的进程有一些特殊的处理,所以会出现下述问题:
1、因为进程需要注册系统信号,由此来接收系统发送的系统信号,例如TERM信号,并在进程退出前进行一些资源清理,如果一个进程没有向系统注册TERM信号,当系统发送TERM信号时,内核判断如果该进程没有注册TERM信号,内核会直接杀死该进程。但是对于PID为1的进程,内核不会做任何处理。而现有的Docker容器中,只有应用进程,没有专门的系统初始化进程,对于PID为1的进程,并不是必须进行系统信号注册的,因此,对于PID为1的进程,如果该进程未注册任何信号处理,会造成该进程资源不释放。
2、如果使用bash方式启动多个进程,当其他线程需要接收系统信号时,当shell进程从容器系统接收到系统信号时,并不会转发到它的子进程即应用进程中,从而导致应用进程需要处理信号时无法实现。
3、由于而现有的Docker容器中,只有应用进程,没有专门的系统初始化进程,没有任何进程能够接管在应用进程中产生的孤儿进程,从而导致孤儿进程资源泄露。
基于上述分析,本发明为了对Docker容器内应用进程进行管理,通过设置一个初始化进程,并利用该初始化进程进行系统信号注册,继而将系统信号转发给应用进程,从而实现对应用进程的管理。
在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。
应用场景总览
为了解决现有方案中存在的进程资源不释放、孤儿进程资源泄漏等问题,本发明通过实现一个初始化进程,并对初始化进程进行分叉操作得到初始进程和第一子进程,由初始进程进行系统信号注册,并通过监听系统信号实现对第一子进程载入的应用进程进行接管。
请参考图1,为本发明Docker容器内应用进程管理系统示意图,本发明应用场景包括但不限于应用程序开发。下面结合图1,对各个部分/流程介绍如下。
S1、Docker容器启动,运行初始化进程。
初始化进程是自定义的一个进程,将Docker容器中所支持的应用进程中的第一个进程定义为初始化进程,通过对该初始化进程的后续处理(例如分叉操作、初始进程注册系统信号、由初始进程将系统信号转发给第一子进程和第一子进程载入的应用进程,等等),实现在Docker容器内对应用进程的管理。
S2、对初始化进程进行分叉操作。
本领域技术人员了解,分叉(fork)是UNIX中的一个操作,当分叉一个进程时,基本上是复制了它,并且分叉后的两个进程都从当前的执行点继续运行,并且每个进程都有自己的内存副本(比如变量)。一个进程(原来的那个)成为父进程,另一个(复制的)成为子进程。例如,内核会复制和当前进程一样的进程运行,新进程与原有进程包含相同的数据,比如变量,环境变量,程序计数器等。复制出来的进程为子进程,原有运行的进程则为子进程的父进程。
分叉操作在时间线(timeline)上创建了一个分支,最后得到了两个独立存在的进程。通过查看fork函数的返回值可以判断哪个是原进程哪个是子进程,继而区分父进程和子进程,使得父进程和子进程后续所执行的操作不同。
本发明中,初始化进程执行分叉操作之后,得到一个初始进程和一个第一子进程。其中,初始进程可以理解为原来的初始化进程,而第一子进程为分支的进程,初始进程和第一子进程是互为独立的两个进程。在后续流程中,初始进程执行S3-S6的步骤,而第一子进程执行S7-S9的步骤。
初始进程执行S3-S6的步骤如下:
S3、记录第一子进程PID以及第一子进程载入的应用进程的PID。
初始进程记录第一子进程PID(port ID)的目的在于将后续监听到的系统信号转发给第一子进程,同理,记录其他应用进程的PID的目的在于将后续监听到的系统信号转发给其他应用进程。其中,PID是进程ID号,在系统内是唯一的。例如,本发明中,初始进程的PID一般为1,第一子进程的PID为2,对于第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,其PID依次为3、4等,以此类推。
S4、向Docker容器所运行的LINUX环境的LINUX内核注册系统信号。
在Linux中,信号是进程间通讯的一种方式,它采用的是异步机制。当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再返回到中断的地方继续执行。
每个信号(以信号值1、2、3、…进行区分)都有自己的响应动作,当接收到信号时,进程会根据信号的响应动作执行相应的操作,信号的响应动作例如可以为:中止信号(Term)、忽略信号(Ign)、中止进程并保存内存信息(Core)、停止进程(Stop)、继续运行进程(Cont)等。
S5、循环监听所述LINUX内核系统信号,并向第一子进程以及第一子进程所载入的应用进程进行系统信号转发。
在S4进行系统信号注册的目的是,可以在S5监听系统信号并将系统信号转发给第一子进程以及第一子进程所载入的应用进程,从而使第一子进程以及应用进程能够有效的接收和处理系统信号,另外,在第一子进程和应用进程主动退出时,可以通过向内核发送退出请求来实现,同时使得初始进程释放该第一子进程或应用进程的相关资源。
S6、等待第一子进程以及其他应用进程的退出信号。
当第一子进程或其他应用进程需要退出时,向内核发起退出请求,然后内核向发起退出请求的第一子进程或其他应用进程的父进程发出SIGCHILD信号,由第一子进程或其他应用进程的父进程释放掉该请求退出的进程的资源。
因此,本发明方式中,由初始进程监听内核发出的SIGCHILD信号;初始进程监听到第一子进程或其他应用进程关联的SIGCHILD信号时,会释放掉该第一子进程或其他应用进程的相关资源。
第一子进程执行S7-S9的步骤如下:
S7、分配第一子进程PID。
如前所述,第一子进程PID一般为2。
S8、运行环境分离。
例如,由于第一子进程和初始进程分叉时,他们的环境变量是完全一样的,后续,第一子进程运行环境分离的过程,运行环境是指进程内的变量,运行代码,环境变量等环境,通过分离之后就可以与初始进程运行不同的代码逻辑。
S9、载入应用程序初始化脚本,从而载入其他应用程序(例如载入应用进程1、应用进程2,等等)。
示例性方法
下面结合图1的应用场景,参考图2来描述根据本发明示例性实施方式的用于应用程序开发中Docker容器内应用进程管理方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
图2示出了Docker容器内应用进程管理方法流程图,其中步骤S201、S202、S203是必须执行的步骤,步骤S204是可选步骤,分别在图中以实线框和虚线框表示。
S201:设置初始化进程。
初始化进程是自定义的一个初始进程,将Docker容器中所支持的应用进程中的第一个进程定义为初始化进程,通过对该初始化进程的后续处理(例如分叉操作、初始进程注册系统信号、由初始进程将系统信号转发给第一子进程和第一子进程载入的应用进程,等等),实现在Docker容器内对应用进程的管理。
S202:对初始化进程进行分叉操作,得到初始进程和第一子进程。
初始化进程执行分叉操作之后,得到一个初始进程和一个第一子进程。其中,初始进程可以理解为原来的初始化进程,而第一子进程为分支的进程,初始进程和第一子进程是互为独立的两个进程。
初始进程记录第一子进程PID(port ID)的目的在于将后续监听到的系统信号转发给第一子进程。其中,PID是进程ID号,在系统内是唯一的。例如,本发明的一个优选方式中,初始进程的PID一般为1,第一子进程的PID为2。对于第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,其PID依次为3、4等。初始进程亦会记录这些进程的PID。。
在本发明的一个优选方式中,在第一子进程进行环境分离操作,并载入应用初始化脚本,从而在第一子进程执行系统调用,将至少一个应用进程载入到Docker容器内。
S203:在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给第一子进程以及第一子进程执行系统调用载入到Docker容器内的至少一个应用进程,从而对第一子进程以及所述至少一个应用进程进行接管。
在本发明的一个优选方式中,为了在初始进程将系统信号转发给第一子进程以及第一子进程所载入的应用进程,初始进程需要记录第一子进程以及所述应用进程的PID。可见,上述方法还包括如下步骤:在初始进程记录第一子进程以及至少一个应用进程的PID;初始进程通过查找记录的PID,将系统信号转发给所记录的PID对应的第一子进程和至少一个应用进程。
S204:初始进程监听系统信号,确定系统信号是否包括LINUX内核发送的SIGCHILD信号;如果监听到与第一子进程或所述应用进程关联的SIGCHILD信号,则对第一子进程或所述应用进程的资源进行回收处理。
本发明实施例中,初始进程进行系统信号注册和监听的目的是,可以将系统信号转发给第一子进程以及第一子进程所载入的应用进程,从而使第一子进程以及其他应用进程能够有效的接收和处理系统信号,另外,在第一子进程和其他应用进程主动退出时,可以通过内核向初始进程发送SIGCHILD信号来实现,从而使得初始进程释放该第一子进程或应用进程相关资源。
具体的,所述接收到所述退出信号时,相应的释放所述第一子进程或应用进程的资源的具体过程包括:初始进程监听系统信号,确定系统信号是否包括LINUX内核发送的SIGCHILD信号;如果所述初始进程监听到内核发送的第一子进程或其他应用进程关联的SIGCHILD信号,则对该第一子进程或其他应用进程的资源进行回收处理。
在一个优选方式中,对其中一个应用进程进行分叉操作,得到互为父子关系的第一应用进程和第二应用进程,或者,在其中一个应用进程中启动另一个应用进程,得到互为父子关系的第一应用进程和第二应用进程。这里,第二应用进程是第一应用进程的子进程。
对于该第二应用进程,初始进程会记录该第二应用进程的PID;并且,初始进程通过查找记录的PID,将系统信号转发给所记录的PID对应的第二应用进程。
另外,现有的Docker容器有可能出现孤儿进程的问题,下面详细分析原因及本发明的解决方式。
如前已描述的,孤儿进程的含义是,当一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。那么,如果第一应用进程退出,而第二应用进程还在运行,则第二应用进程则会成为孤儿进程。如果没有任何进程接管孤儿进程,在孤儿进程退出时,没有其父进程来回收资源,则会造成孤儿进程的资源泄漏。
因此,在本发明的一个优选方式中,当第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程,即将所述第二应用进程的父进程设置为PID为1的进程,由此在该第二应用进程退出时,可以由初始进程进行资源回收。具体为,初始进程监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;如果初始进程监听到第二应用进程关联的SIGCHILD信号,则对第二应用进程的资源进行回收处理。
可见,正常情况下,如果一个进程要退出,它向内核提出请求,并由内核向它的父进程发送SIGCHLD信号。如果在该进程发起退出请求时,它的父进程已经提前退出或终止了,则没有进程对该进程关联的SIGCHLD信号进行接收并处理,则造成该进程成为孤儿进程的问题。本发明一个方式中,如果出现上述情况,即一个进程要退出时它的父进程已经提前退出或终止了,则由初始进程接收它关联的SIGCHLD信号,并对该进程的资源进行释放。可见,这种处理方式可以避免现有技术中孤儿进程资源无法释放的问题。
可见,本发明实施例至少具有以下技术优点:
1、通过将Docker容器所支持的应用进程中第一个应用进程设置为初始化进程,并将该初始化进程分叉成为初始进程和第一子进程,并由该初始进程进行系统信号注册和转发,第一子进程和应用进程能有效的接收和处理系统信号,同时初始进程也能够接收内核发送的有关第一子进程和应用进程关联的系统信号,从而能够避免出现应用进程无法通过向外部发送信号导致无法控制其终止的问题。
2、通过初始化进程的分叉操作,由于初始进程在容器内PID为1,当系统产生孤儿进程时,容器运行所处LINUX环境的LINUX内核会将该孤儿进程交给PID为1的初始进程进行接管,从而避免孤儿进程资源泄漏问题。
3、由于初始进程循环等待第一子进程和应用进程的退出信号,从而可有效避免第一子进程和应用进程出现僵尸进程的问题。同理,对于应用进程进一步分叉出来的第二应用进程等,也可以同样避免出现僵尸进程的问题。
示例性装置
在介绍了本发明示例性实施方式的方法之后,接下来,参考图3对本发明示例性实施方式的、用于Docker容器内应用进程管理装置进行说明。
该Docker容器内应用进程管理装置至少包括初始化单元301、分叉操作单元302和初始进程操作单元303。
初始化单元301,用于设置初始化进程。
初始化进程是自定义的一个初始进程,将Docker容器中所支持的应用进程中的第一个进程定义为初始化进程,通过对该初始进程的后续处理(例如分叉操作、初始进程注册系统信号、由初始进程将系统信号转发给第一子进程和第一子进程载入的应用进程,等等),实现在Docker容器内对应用进程的管理。
分叉操作单元302,用于对所述初始化进程进行分叉操作,得到初始进程和第一子进程。
本领域技术人员了解,分叉(fork)是UNIX中的一个操作,当分叉一个进程时,基本上是复制了它,并且分叉后的两个进程都从当前的执行点继续运行,并且每个进程都有自己的内存副本(比如变量)。一个进程(原来的那个)成为父进程,另一个(复制的)成为子进程。例如,内核会复制和当前进程一样的进程运行,新进程与原有进程包含相同的数据,比如变量,环境变量,程序计数器等。复制出来的进程为子进程,原有运行的进程则为子进程的父进程。
分叉操作在时间线(timeline)上创建了一个分支,最后得到了两个独立存在的进程。通过查看fork函数的返回值可以判断哪个是原进程哪个是子进程,继而区分父进程和子进程,使得父进程和子进程后续所执行的操作不同。
本发明中,初始化进程执行分叉操作之后,得到一个初始进程和一个第一子进程。其中,初始进程可以理解为原来的初始化进程,而第一子进程为分支的进程,初始进程和第一子进程是互为独立的两个进程。
初始进程操作单元303,用于在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给所述第一子进程以及所述第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,从而对所述第一子进程以及所述至少一个应用进程进行接管。
在Linux中,信号是进程间通讯的一种方式,它采用的是异步机制。当信号发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再返回到中断的地方继续执行。
每个信号(以信号值1、2、3、…进行区分)都有自己的响应动作,当接收到信号时,进程会根据信号的响应动作执行相应的操作,信号的响应动作可以包括:中止信号(Term)、忽略信号(Ign)、中止进程并保存内存信息(Core)、停止进程(Stop)、继续运行进程(Cont)。
进行系统信号注册的目的是,可以监听系统信号并将系统信号转发给第一子进程以及第一子进程所载入的应用进程,从而使第一子进程以及应用进程能够有效的接收和处理系统信号,另外,在第一子进程和应用进程主动退出时,可以通过向初始进程发送退出信号来实现,同时使得初始进程释放该第一子进程或应用进程相关资源。
在一个优选方式中,所述初始进程操作单元303还用于:在初始进程记录第一子进程以及所述至少一个应用进程的PID;所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第一子进程和所述至少一个应用进程。
初始进程记录第一子进程PID(port ID)的目的在于将后续监听到的系统信号转发给第一子进程,同理,记录其他应用进程的PID的目的在于将后续监听到的系统信号转发给其他应用进程。其中,PID是进程ID号,在系统内是唯一的。例如,本发明中,初始进程的PID一般为1,第一子进程的PID为2,对于第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,其PID依此为3、4等,以此类推。
在一个优选方式中,初始进程操作单元303还用于:监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;所述装置还包括:资源释放单元304,用于当监听到与所述第一子进程或所述应用进程关联的SIGCHILD信号时,对所述第一子进程或所述应用进程的资源进行回收处理。
在一个优选方式中,所述初始进程操作单元303还用于:设置所述初始进程的PID为1。
在一个优选方式中,该装置还包括:子进程操作单元305,用于在所述第一子进程进行环境分离操作,并载入应用初始化脚本,从而在所述第一子进程执行系统调用,将所述至少一个应用进程载入到所述Docker容器内。
例如,由于第一子进程和初始进程分叉时,他们的环境变量是完全一样的,后续,第一子进程运行环境分离的过程,运行环境是指进程内的变量,运行代码,环境变量等环境,通过分离之后就可以与初始进程运行不同的代码逻辑。
在一个优选方式中,还包括:应用进程处理单元306,用于对其中一个应用进程进行分叉操作,得到互为父子关系的第一应用进程和第二应用进程,或者,在其中一个应用进程中启动另一个应用进程,得到互为父子关系的第一应用进程和第二应用进程。
在一个优选方式中,所述初始进程操作单元303还用于:记录所述第二应用进程的PID,所述第二应用进程是所述第一应用进程的子进程;通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第二应用进程。
另外,现有的Docker容器有可能出现孤儿进程的问题,下面详细分析原因及本发明的解决方式。
如前已描述的,孤儿进程的含义是,当一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将成为孤儿进程。那么,如果第一应用进程退出,而第二应用进程还在运行,则第二应用进程则会成为孤儿进程。如果没有任何进程接管孤儿进程,在孤儿进程退出时,没有其父进程来回收资源,则会造成孤儿进程的资源泄漏。
因此,在本发明的一个优选方式中,当第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程,即将所述第二应用进程的父进程设置为PID为1的进程,由此在该第二应用进程退出时,可以由初始进程进行资源回收。
具体的,所述应用进程处理单元306还用于,当所述第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程。所述初始进程操作单元303还用于:监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;所述装置还包括:资源释放单元304,用于当监听到与所述第二应用进程关联的SIGCHILD信号时,对所述第二应用进程的资源进行回收处理。
图3示出的Docker容器内应用进程管理装置结构示意图中,其中初始化单元301、分叉操作单元302和初始进程操作单元303是必选单元,资源释放单元304、子进程操作单元305、应用进程处理单元306是可选单元,分别在图中以实线框和虚线框表示。
示例性设备
在介绍了本发明示例性实施方式的方法和装置之后,接下来,介绍根据本发明的另一示例性实施方式的Docker容器内应用进程管理设备。
所属技术领域的技术人员能够理解,本发明的各个方面可以实现为系统、方法或程序产品。因此,本发明的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
在一些可能的实施方式中,根据本发明的Docker容器内应用进程管理设备可以至少包括至少一个处理单元、以及至少一个存储单元。其中,所述存储单元存储有程序代码,当所述程序代码被所述处理单元执行时,使得所述处理单元执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的Docker容器内应用进程管理方法中的步骤。例如,所述处理单元可以执行如图2所示的步骤S201,设置初始化进程;步骤S202,初始化进程进行分叉操作,得到初始进程和第一子进程;步骤S203,在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给第一子进程以及第一子进程执行系统调用载入到Docker容器内的至少一个应用进程,从而对第一子进程以及所述至少一个应用进程进行接管。
下面参考图4来描述根据本发明的这种实施方式的Docker容器内应用进程管理设备40。图4显示的Docker容器内应用进程管理设备40仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图4所示,Docker容器内应用进程管理设备40以通用计算设备的形式表现。Docker容器内应用进程管理设备40的组件可以包括但不限于:上述至少一个处理单元41、上述至少一个存储单元42、连接不同系统组件(包括处理单元41和存储单元42)的总线43。
总线43表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器、外围总线、图形加速端口、处理器或者使用多种总线结构中的任意总线结构的局域总线。
存储单元42可以包括易失性存储器形式的可读介质,例如随机存取存储器(RAM)4201和/或高速缓存存储器4202,还可以进一步包括只读存储器4203。
存储单元42还可以包括具有一组(至少一个)程序模块4204的程序/实用工具421,这样的程序模块包括但不限于:操作系统、一个或多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或者某种组合中可能包括网络环境的实现。
Docker容器内应用进程管理设备40也可以与一个或多个外部设备44(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或多个使得用户能与Docker容器内应用进程管理设备40交互的设备通信,和/或与使得该Docker容器内应用进程管理设备40与一个或多个其他计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口45进行。并且,Docker容器内应用进程管理设备还可以通过网络适配器46与一个或多个网络(例如局域网,广域网等)通信。如图所示,网络适配器46通过总线与Docker容器内应用进程管理设备40的其他模块通信。应当明白,尽管图4中未示出,可以结合Docker容器内应用进程管理设备使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
示例性程序产品
在一些可能的实施方式中,本发明的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当所述程序产品在终端上运行时,所述程序代码用于使所述终端执行本说明书上述“示例性方法”部分中描述的根据本发明各种示例性实施方式的Docker容器内应用进程管理方法的步骤,例如所述终端可以执行如图2所示的步骤S201,设置初始化进程;步骤S202,初始化进程进行分叉操作,得到初始进程和第一子进程;步骤S203,在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给第一子进程以及第一子进程执行系统调用载入到Docker容器内的至少一个应用进程,从而对第一子进程以及所述至少一个应用进程进行接管。
所述程序产品可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或可读存储介质。可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光钎、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件或者上述的任意合适的组合。
如图5所示,描述了根据本发明的实施方式的用于Docker容器内应用进程管理的程序产品50,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端,例如个人电脑上运行。然而,本发明的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或器件使用或者与其结合使用。
可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本发明操作的程序代码,所述程序设计语言包括面向对象的程序设计语言——例如Java、C++等,还包括常规的过程式程序设计语言——诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络——包括局域网或广域网——连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
应当注意,尽管在上文详细描述中提及了Docker容器内应用进程管理装置的若干单元,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多单元的特征和功能可以在一个单元中具体化。反之,上文描述的一个单元的特征和功能可以进一步划分为由多个单元来具体化。
此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。
虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。
Claims (15)
1.一种Docker容器内应用进程管理方法,其特征在于,包括:
通过将所述Docker容器所支持的应用进程中第一个应用进程设置为初始化进程;
对所述初始化进程进行分叉操作,得到初始进程和第一子进程;
在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给所述第一子进程以及所述第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,从而对所述第一子进程以及所述至少一个应用进程进行接管;
在初始进程记录第一子进程以及所述至少一个应用进程的PID;
所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第一子进程和所述至少一个应用进程;
在所述初始进程将系统信号转发给所述第一子进程和所述至少一个应用进程之后,还包括:
所述初始进程监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;
如果所述初始进程监听到与所述第一子进程或所述应用进程关联的SIGCHILD信号,则对所述第一子进程或所述应用进程的资源进行回收处理。
2.如权利要求1所述的方法,其特征在于,还包括:
设置所述初始进程的PID为1。
3.如权利要求1-2任一项所述的方法,其特征在于,还包括:
在所述第一子进程进行环境分离操作,并载入应用初始化脚本,从而在所述第一子进程执行系统调用,将所述至少一个应用进程载入到所述Docker容器内。
4.如权利要求1-2任一项所述的方法,其特征在于,还包括:
对其中一个应用进程进行分叉操作,得到互为父子关系的第一应用进程和第二应用进程,或者,
在其中一个应用进程中启动另一个应用进程,得到互为父子关系的第一应用进程和第二应用进程。
5.如权利要求4所述的方法,其特征在于,还包括:
所述初始进程记录所述第二应用进程的PID,所述第二应用进程是所述第一应用进程的子进程;
所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第二应用进程。
6.如权利要求5所述的方法,其特征在于,还包括:
当所述第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程。
7.如权利要求6所述的方法,其特征在于,还包括:
所述初始进程监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;
如果所述初始进程监听到所述第二应用进程关联的SIGCHILD信号,则对所述第二应用进程的资源进行回收处理。
8.一种Docker容器内应用进程管理装置,其特征在于,包括:
初始化单元,用于设置初始化进程;
分叉操作单元,用于对所述初始化进程进行分叉操作,得到初始进程和第一子进程;
初始进程操作单元,用于在初始进程进行系统信号注册操作,通过监听系统信号并将系统信号转发给所述第一子进程以及所述第一子进程执行系统调用载入到所述Docker容器内的至少一个应用进程,从而对所述第一子进程以及所述至少一个应用进程进行接管;
所述初始进程操作单元还用于:在初始进程记录第一子进程以及所述至少一个应用进程的PID;所述初始进程通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第一子进程和所述至少一个应用进程;
所述初始进程操作单元还用于:监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;所述装置还包括:资源释放单元,用于当监听到与所述第一子进程或所述应用进程关联的SIGCHILD信号时,对所述第一子进程或所述应用进程的资源进行回收处理。
9.如权利要求8所述的装置,其特征在于,所述初始进程操作单元还用于:设置所述初始进程的PID为1。
10.如权利要求8-9任一项所述的装置,其特征在于,还包括:
子进程操作单元,用于在所述第一子进程进行环境分离操作,并载入应用初始化脚本,从而在所述第一子进程执行系统调用,将所述至少一个应用进程载入到所述Docker容器内。
11.如权利要求8-9任一项所述的装置,其特征在于,还包括:应用进程处理单元,用于对其中一个应用进程进行分叉操作,得到互为父子关系的第一应用进程和第二应用进程,或者,在其中一个应用进程中启动另一个应用进程,得到互为父子关系的第一应用进程和第二应用进程。
12.如权利要求11所述的装置,其特征在于,所述初始进程操作单元还用于:记录所述第二应用进程的PID,所述第二应用进程是所述第一应用进程的子进程;通过查找记录的所述PID,将所述系统信号转发给所记录的PID对应的所述第二应用进程。
13.如权利要求12所述的装置,其特征在于,所述应用进程处理单元还用于,当所述第一应用进程已终止或退出时,将所述第二应用进程的父进程设置为所述初始进程。
14.如权利要求13所述的装置,其特征在于,所述初始进程操作单元还用于:监听系统信号,确定系统信号是否包括容器运行所处LINUX环境的LINUX内核发送的SIGCHILD信号;所述装置还包括:资源释放单元,用于当监听到与所述第二应用进程关联的SIGCHILD信号时,对所述第二应用进程的资源进行回收处理。
15.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权利要求1-7任一项所述Docker容器内应用进程管理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710125107.2A CN107025135B (zh) | 2017-03-03 | 2017-03-03 | Docker容器内应用进程管理方法、装置和介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710125107.2A CN107025135B (zh) | 2017-03-03 | 2017-03-03 | Docker容器内应用进程管理方法、装置和介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107025135A CN107025135A (zh) | 2017-08-08 |
CN107025135B true CN107025135B (zh) | 2020-02-21 |
Family
ID=59525973
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710125107.2A Active CN107025135B (zh) | 2017-03-03 | 2017-03-03 | Docker容器内应用进程管理方法、装置和介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107025135B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109947553B (zh) * | 2017-12-21 | 2022-04-26 | 中国电信股份有限公司 | 容器的进程调度方法、装置和计算机可读存储介质 |
CN109491762B (zh) * | 2018-11-09 | 2021-07-09 | 网易(杭州)网络有限公司 | 容器状态控制方法及装置、存储介质、电子设备 |
US11283787B2 (en) | 2020-04-13 | 2022-03-22 | International Business Machines Corporation | Computer resource provisioning |
CN113220495B (zh) * | 2021-05-24 | 2024-04-16 | 浙江大华技术股份有限公司 | 一种进程异常事件处理方法、装置、电子设备及存储介质 |
CN114676424B (zh) * | 2022-05-25 | 2022-09-06 | 杭州默安科技有限公司 | 一种容器逃逸检测与阻断方法、装置、设备及存储介质 |
CN115202830B (zh) * | 2022-09-09 | 2022-12-30 | 统信软件技术有限公司 | 根文件系统的准备方法、系统、计算设备及可读存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5717926A (en) * | 1995-02-28 | 1998-02-10 | International Business Machines Corporation | Efficient forking of a process |
CN100346611C (zh) * | 2005-06-30 | 2007-10-31 | 西安交通大学 | Linux环境下基于调用栈图的入侵检测方法 |
CN102439564B (zh) * | 2011-10-24 | 2014-03-26 | 华为技术有限公司 | 在Linux容器中启动应用程序的方法和系统 |
WO2015161456A1 (zh) * | 2014-04-22 | 2015-10-29 | 华为终端有限公司 | 一种具有多操作系统的终端 |
CN103365758B (zh) * | 2013-08-05 | 2016-03-16 | 北京搜狐新媒体信息技术有限公司 | 一种虚拟化环境下的进程监控方法及系统 |
CN106020957A (zh) * | 2016-04-27 | 2016-10-12 | 青岛海信移动通信技术股份有限公司 | 移动通信终端进程创建方法和移动通信终端 |
-
2017
- 2017-03-03 CN CN201710125107.2A patent/CN107025135B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5717926A (en) * | 1995-02-28 | 1998-02-10 | International Business Machines Corporation | Efficient forking of a process |
CN100346611C (zh) * | 2005-06-30 | 2007-10-31 | 西安交通大学 | Linux环境下基于调用栈图的入侵检测方法 |
CN102439564B (zh) * | 2011-10-24 | 2014-03-26 | 华为技术有限公司 | 在Linux容器中启动应用程序的方法和系统 |
CN103365758B (zh) * | 2013-08-05 | 2016-03-16 | 北京搜狐新媒体信息技术有限公司 | 一种虚拟化环境下的进程监控方法及系统 |
WO2015161456A1 (zh) * | 2014-04-22 | 2015-10-29 | 华为终端有限公司 | 一种具有多操作系统的终端 |
CN106020957A (zh) * | 2016-04-27 | 2016-10-12 | 青岛海信移动通信技术股份有限公司 | 移动通信终端进程创建方法和移动通信终端 |
Also Published As
Publication number | Publication date |
---|---|
CN107025135A (zh) | 2017-08-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107025135B (zh) | Docker容器内应用进程管理方法、装置和介质 | |
CN107636612B (zh) | 应用迁移装置、方法与存储介质 | |
US9092356B2 (en) | Executing a kernel device driver as a user space process | |
US8904159B2 (en) | Methods and systems for enabling control to a hypervisor in a cloud computing environment | |
US9946870B2 (en) | Apparatus and method thereof for efficient execution of a guest in a virtualized enviroment | |
EP3454208A1 (en) | Methods and apparatuses for remote application provisioning automation over virtualized it infrastructure | |
WO2013027910A1 (ko) | 클라우드 컴퓨팅 서버 시스템의 가상머신 제어 장치 및 방법 | |
US9262232B2 (en) | Priority build execution in a continuous integration system | |
US9201823B2 (en) | Pessimistic interrupt affinity for devices | |
CN111459623B (zh) | 应用程序恢复运行的方法、装置及计算机 | |
US11729218B2 (en) | Implementing a service mesh in the hypervisor | |
US20220156103A1 (en) | Securing virtual machines in computer systems | |
US20230205561A1 (en) | Managing containers across multiple operating systems | |
US11531526B1 (en) | Creating portable serverless applications | |
CN110659104B (zh) | 一种业务监控方法及相关设备 | |
CN109117253B (zh) | 一种微内核调度的方法和装置 | |
US11494184B1 (en) | Creation of transportability container files for serverless applications | |
EP4102367A1 (en) | Message format indicator for resource-constrained devices | |
US9619277B2 (en) | Computer with plurality of processors sharing process queue, and process dispatch processing method | |
US9959225B2 (en) | Computer apparatus and control method of computer apparatus | |
US20220121463A1 (en) | Page fault support for virtual machine network accelerators | |
EP4300307A1 (en) | Systems and method for processing privileged instructions using user space memory | |
US20240020103A1 (en) | Parallelizing data processing unit provisioning | |
US20220308940A1 (en) | Allocating and using file descriptors for an application executing on a plurality of nodes | |
US9811397B2 (en) | Direct application-level control of multiple asynchronous events |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |