CN109947553B - 容器的进程调度方法、装置和计算机可读存储介质 - Google Patents
容器的进程调度方法、装置和计算机可读存储介质 Download PDFInfo
- Publication number
- CN109947553B CN109947553B CN201711391815.7A CN201711391815A CN109947553B CN 109947553 B CN109947553 B CN 109947553B CN 201711391815 A CN201711391815 A CN 201711391815A CN 109947553 B CN109947553 B CN 109947553B
- Authority
- CN
- China
- Prior art keywords
- container
- function
- signal
- sub
- ending
- 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
Abstract
本公开涉及一种容器的进程调度方法、装置和计算机可读存储介质,涉及云计算技术领域。该方法包括:通过容器的启动进程接收容器的守护进程或失效子进程发送的进程结束信号;响应于进程结束信号,调用相应的系统函数;通过系统函数结束失效子进程。该方法和装置能够结束僵死进程,释放被占用的系统资源,提高系统的资源利用率。
Description
技术领域
本公开涉及云计算技术领域,特别涉及一种容器的进程调度方法、容器的进程调度装置和计算机可读存储介质。
背景技术
在unix和linux系统中,子进程通常由父进程创建,然后再由子进程创建新的进程。进程退出时候,系统内核会释放该进程占用的部分资源(如打开的文件、占用的内存等),也会为其保留部分信息(如进程号,退出状态,运行时间等)。
但是,子进程的结束和父进程的运行是两个异步过程,即父进程永远无法预测子进程什么时候结束。如果子进程已经退出,而其父进程并没有获取子进程的状态信息,那么该子进程占用的信息仍然保存在系统中,从而形成僵死进程。僵死进程的进程号会被一直占用,而系统所能使用的进程号是有限的。因此,大量的僵死进程会导致系统没有可用的进程号从而无法产生新的进程。
相关技术是在完整操作系统中将僵死进程变成没有父进程的孤儿进程,再通过init进程循环地结束所有僵死进程,释放其占用的资源和信息。
发明内容
本公开的发明人发现上述相关技术中存在如下问题:与完整的操作系统不同,容器(Container)的启动进程不是init进程,无法通过上述相关技术解决僵死进程问题,从而导致系统资源被占用,系统资源利用率低下。针对上述问题中的至少一个问题,本公开提出了一种容器的进程调度技术方案,能够结束僵死进程,释放被占用的系统资源,提高系统的资源利用率。
根据本公开的一些实施例,提供了一种容器的进程调度方法,包括:通过容器的启动进程接收所述容器的守护进程或失效子进程发送的进程结束信号;响应于所述进程结束信号,调用相应的系统函数;通过系统函数结束所述失效子进程。
可选地,所述守护进程发送的进程结束信号为SIGTERM信号,所述失效子进程发送的进程结束信号为SIGCHILD信号。
可选地,响应于SIGTERM信号,调用shutdown()函数,响应于SIGCHILD信号,调用waitpid()或wait()函数。
可选地,通过shutdown()函数调用所述失效子进程的配置文件中的退出命令来结束所述失效子进程,通过waitpid()或wait()函数阻塞所述失效子进程的父进程,结束所述失效子进程后继续运行所述父进程。
可选地,清理并释放所述失效子进程占用的资源和信息。
根据本公开的另一些实施例,提供一种容器的进程调度装置,包括:信号接收模块,用于通过容器的启动进程接收所述容器的守护进程或失效子进程发送的进程结束信号;函数调用模块,用于响应于所述进程结束信号,调用相应的系统函数;进程结束模块,用于通过系统函数结束所述失效子进程。
可选地,所述守护进程发送的进程结束信号为SIGTERM信号,所述失效子进程发送的进程结束信号为SIGCHILD信号。
可选地,所述函数调用模块响应于SIGTERM信号调用shutdown()函数,响应于SIGCHILD信号调用waitpid()或wait()函数。
可选地,所述进程结束模块通过shutdown()函数调用所述失效子进程的配置文件中的退出命令来结束所述失效子进程,通过waitpid()或wait()函数阻塞所述失效子进程的父进程,结束所述失效子进程后继续运行所述父进程。
可选地,所述进程结束模块清理并释放所述失效子进程占用的资源和信息。
根据本公开的又一些实施例,提供一种容器的进程调度装置,包括:存储器和耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器装置中的指令,执行上述任一个实施例所述的容器的进程调度方法。
根据本公开的再一些实施例,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一个实施例所述的容器的进程调度方法。
在上述实施例中,为容器的启动进程增加了信号接收能力和信号处理能力,能够根据接收到的进程结束信号调用相应的系统函数来处理失效子进程。这样就解决了僵死进程问题,释放了被占用资源,提高了系统的资源利用率。
附图说明
构成说明书的一部分的附图描述了本公开的实施例,并且连同说明书一起用于解释本公开的原理。
参照附图,根据下面的详细描述,可以更加清楚地理解本公开,其中:
图1示出本公开的容器的进程调度方法的一些实施例的流程图;
图2示出本公开的进程交互过程的示意图;
图3示出本公开的容器的进程调度装置的一些实施例的框图;
图4示出本公开的容器的进程调度装置一些实施例的框图。
具体实施方式
现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值不限制本公开的范围。
同时,应当明白,为了便于描述,附图中所示出的各个部分的尺寸并不是按照实际的比例关系绘制的。
以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。
对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为授权说明书的一部分。
在这里示出和讨论的所有示例中,任何具体值应被解释为仅仅是示例性的,而不是作为限制。因此,示例性实施例的其它示例可以具有不同的值。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。
与完整操作系统不同,容器的启动进程(进程ID=1)可以是某些应用程序而不是inti进程。作为启动进程的应用程序无法以守护进程(Container Deamon)的方式运行,也就无法对容器的各进程进行完整的生命周期管理。也就是说,在这种情况下,容器的启动进程无法像完整操作系统的inti进程一样循环地结束已经推出的子进程,也就无法解决僵死进程的问题。
但是,各进程之间可以通过信号进行通信。信号采用异步机制,信号被发送到某个进程中时,操作系统会中断该进程的正常流程,并进入相应的信号处理函数执行操作,完成后再回到中断的地方继续执行。
基于这种进程间的信号,本公开为容器的启动进程增加信号接收功能和相应的信号处理功能来解决僵死进程问题,具体可以通过图1中的实施例实现。
图1示出本公开的容器的进程调度方法的一些实施例的流程图。
如图1所示,该方法包括:步骤110,接收进程结束信号;步骤120,调用系统函数;和步骤130,结束失效子进程。
在步骤110中,可以通过容器的启动进程接收容器的守护进程或失效子进程发送的进程结束信号。例如,可以在系统向容器发起停止命令时,接收来自守护进程的SIGTERM信号。还可以在有子进程失效时,接收来自该失效子进程的SIGCHILD信号。
在步骤120中,响应于进程结束信号,调用相应的系统函数。例如,可以响应于SIGTERM信号调用shutdown()函数。还可以响应于SIGCHILD信号调用waitpid()或wait()函数。
在步骤130中,通过系统函数结束失效子进程。例如,可以通过shutdown()函数进行失效子进程的正常退出(如调用失效子进程的配置文件中的退出命令),并清理和释放使用中的资源和信息(如进程号、退出状态、运行时间等),从而保证新进程的生成。还可通过waitpid()或wait()函数阻塞失效子进程的父进程,等待失效子进程结束后清除该失效子进程,然后继续运行该父进程。
为了清楚地说明本公开结束失效进程的技术方案,下面通过图2中各进程之间的交互过程进一步进行说明。
图2示出本公开的进程交互过程的示意图。
如图2所示,容器中包含启动进程21、失效进程23及其父进程24,且该容器的守护进程为守护进程22。可以通过下面的交互过程来结束失效进程23。
在一些实施例中,守护进程22向该容器发起停止命令,响应于该停止命令,容器中的各进程可以完成相应的准备工作。守护进程22向启动进程21发送SIGTERM信号。响应于SIGTERM信号,启动进程21通过shutdown()函数调用失效进程23的配置文件注册的退出命令。保存失效进程23的执行现场后清除失效进程23,从而可以避免由失效进程强制退出导致的异常退出问题。
在另一些实施例中,失效进程23向启动进程21发送SIGCHILD信号。启动进程21响应于SIGCHILD信号,阻塞失效进程23的父进程24(即将父进程24挂起),结束失效进程23,清理其占用的资源和信息后继续运行父进程24。
上述实施例中,为容器的启动进程增加了信号接收能力和信号处理能力,能够根据接收到的进程结束信号调用相应的系统函数来处理失效子进程。这样就解决了僵死进程问题,释放了被占用资源,保证了新进程的生成。
图3示出本公开的容器的进程调度装置的一些实施例的框图。
如图3所示,进程调度装置3包括信号接收模块31、函数调用模块32和进程结束模块33。
信号接收模块31通过容器的启动进程接收容器的守护进程或失效子进程发送的进程结束信号。例如,守护进程发送的进程结束信号为SIGTERM信号,失效子进程发送的进程结束信号为SIGCHILD信号。
函数调用模块32响应于进程结束信号,调用相应的系统函数。例如,函数调用模块32响应于SIGTERM信号调用shutdown()函数,响应于SIGCHILD信号调用waitpid()或wait()函数。
进程结束模块33通过系统函数结束失效子进程,清理并释放失效子进程占用的资源和信息。例如,进程结束模块33通过shutdown()函数调用失效子进程的配置文件中的退出命令来结束失效子进程,通过waitpid()或wait()函数阻塞失效子进程的父进程,结束失效子进程后继续运行父进程。
上述实施例中,为容器的启动进程增加了信号接收能力和信号处理能力,能够根据接收到的进程结束信号调用相应的系统函数来处理失效子进程。从而解决了僵死进程问题,释放了被占用资源,保证了新进程的生成。
图4示出本公开的容器的进程调度装置一些实施例的框图。
如图4所示,该实施例的测量装置4包括:存储器41以及耦接至该存储器41的处理器42,处理器42被配置为基于存储在存储器41中的指令,执行本公开中任意一个实施例中的容器的进程调度方法。
存储器41例如可以包括系统存储器、固定非易失性存储介质等。系统存储器例如存储有操作系统、应用程序、引导装载程序(Boot Loader)、数据库以及其他程序等。
本领域内的技术人员应当明白,本公开的实施例可提供为方法、系统、或计算机程序产品。因此,本公开可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本公开可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
至此,已经详细描述了根据本公开的容器的进程调度方法、容器的进程调度装置和计算机可读存储介质。为了避免遮蔽本公开的构思,没有描述本领域所公知的一些细节。本领域技术人员根据上面的描述,完全可以明白如何实施这里公开的技术方案。
可能以许多方式来实现本公开的方法和系统。例如,可通过软件、硬件、固件或者软件、硬件、固件的任何组合来实现本公开的方法和系统。用于所述方法的步骤的上述顺序仅是为了进行说明,本公开的方法的步骤不限于以上具体描述的顺序,除非以其它方式特别说明。此外,在一些实施例中,还可将本公开实施为记录在记录介质中的程序,这些程序包括用于实现根据本公开的方法的机器可读指令。因而,本公开还覆盖存储用于执行根据本公开的方法的程序的记录介质。
虽然已经通过示例对本公开的一些特定实施例进行了详细说明,但是本领域的技术人员应该理解,以上示例仅是为了进行说明,而不是为了限制本公开的范围。本领域的技术人员应该理解,可在不脱离本公开的范围和精神的情况下,对以上实施例进行修改。本公开的范围由所附权利要求来限定。
Claims (10)
1.一种容器的进程调度方法,包括:
通过容器的启动进程接收所述容器的守护进程或失效子进程发送的进程结束信号,所述启动进程是inti进程以外的应用程序;
所述启动进程响应于所述进程结束信号,调用相应的系统函数;
所述启动进程通过系统函数结束所述失效子进程;
其中,所述通过容器的启动进程接收所述容器的守护进程或失效子进程发送的进程结束信号包括:
在系统向所述容器发起停止命令时,接收来自所述守护进程的SIGTERM信号;或者
在子进程失效时,接收来自所述失效子进程的SIGCHILD信号。
2.根据权利要求1所述的进程调度方法,其中调用相应的系统函数包括:
响应于SIGTERM信号,调用shutdown()函数;
响应于SIGCHILD信号,调用waitpid()或wait()函数。
3.根据权利要求2所述的进程调度方法,其中结束所述失效子进程包括:
通过shutdown()函数调用所述失效子进程的配置文件中的退出命令来结束所述失效子进程;
通过waitpid()或wait()函数阻塞所述失效子进程的父进程,结束所述失效子进程后继续运行所述父进程。
4.根据权利要求1-3任一项所述的进程调度方法,其中结束所述失效子进程包括:
清理并释放所述失效子进程占用的资源和信息。
5.一种容器的进程调度装置,包括:
信号接收模块,用于通过容器的启动进程接收所述容器的守护进程或失效子进程发送的进程结束信号,所述启动进程是inti进程以外的应用程序;
函数调用模块,用于响应于所述进程结束信号,通过所述启动进程调用相应的系统函数;
进程结束模块,用于通过所述启动进程利用系统函数结束所述失效子进程;
所述信号接收模块在系统向所述容器发起停止命令时,接收来自所述守护进程的SIGTERM信号,或者在子进程失效时,接收来自所述失效子进程的SIGCHILD信号。
6.根据权利要求5所述的进程调度装置,其中,
所述函数调用模块响应于SIGTERM信号调用shutdown()函数,响应于SIGCHILD信号调用waitpid()或wait()函数。
7.根据权利要求6所述的进程调度装置,其中,
所述进程结束模块通过shutdown()函数调用所述失效子进程的配置文件中的退出命令来结束所述失效子进程,通过waitpid()或wait()函数阻塞所述失效子进程的父进程,结束所述失效子进程后继续运行所述父进程。
8.根据权利要求5-7任一项所述的进程调度装置,其中,
所述进程结束模块清理并释放所述失效子进程占用的资源和信息。
9.一种容器的进程调度装置,包括:
存储器;和
耦接至所述存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行权利要求1-4任一项所述的容器的进程调度方法。
10.一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现权利要求1-4任一项所述的容器的进程调度方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711391815.7A CN109947553B (zh) | 2017-12-21 | 2017-12-21 | 容器的进程调度方法、装置和计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201711391815.7A CN109947553B (zh) | 2017-12-21 | 2017-12-21 | 容器的进程调度方法、装置和计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109947553A CN109947553A (zh) | 2019-06-28 |
CN109947553B true CN109947553B (zh) | 2022-04-26 |
Family
ID=67004684
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201711391815.7A Active CN109947553B (zh) | 2017-12-21 | 2017-12-21 | 容器的进程调度方法、装置和计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109947553B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102439564A (zh) * | 2011-10-24 | 2012-05-02 | 华为技术有限公司 | 在Linux容器中启动应用程序的方法和系统 |
US20140307165A1 (en) * | 2013-04-15 | 2014-10-16 | Kabushiki Kaisha Toshiba | Information processing apparatus and output control method |
CN107025135A (zh) * | 2017-03-03 | 2017-08-08 | 网易(杭州)网络有限公司 | Docker容器内应用进程管理方法、装置和介质 |
-
2017
- 2017-12-21 CN CN201711391815.7A patent/CN109947553B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102439564A (zh) * | 2011-10-24 | 2012-05-02 | 华为技术有限公司 | 在Linux容器中启动应用程序的方法和系统 |
US20140307165A1 (en) * | 2013-04-15 | 2014-10-16 | Kabushiki Kaisha Toshiba | Information processing apparatus and output control method |
CN107025135A (zh) * | 2017-03-03 | 2017-08-08 | 网易(杭州)网络有限公司 | Docker容器内应用进程管理方法、装置和介质 |
Non-Patent Citations (1)
Title |
---|
孤儿进程与僵尸进程总结;Ankers Blog;《https://web.archive.org/web/20171121090624/https://www.cnblogs.com/Anker/p/3271773.html》;20171121;第1-5页 * |
Also Published As
Publication number | Publication date |
---|---|
CN109947553A (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Gadepalli et al. | Sledge: A serverless-first, light-weight wasm runtime for the edge | |
JP6285905B2 (ja) | 持続性および回復性のあるワーカー・プロセス | |
CN113010275B (zh) | 一种中断处理方法和装置 | |
US9858101B2 (en) | Virtual machine input/output thread management | |
CN108733496B (zh) | 事件处理方法和装置 | |
Teabe et al. | The lock holder and the lock waiter pre-emption problems: Nip them in the bud using informed spinlocks (i-spinlock) | |
CA3055071C (en) | Writing composite objects to a data store | |
CN110673927B (zh) | 一种虚拟机的调度方法和装置 | |
CN107025135B (zh) | Docker容器内应用进程管理方法、装置和介质 | |
US10055234B1 (en) | Switching CPU execution path during firmware execution using a system management mode | |
CN111352797A (zh) | 用于监视软件应用程序进程的系统和方法 | |
WO2015131542A1 (zh) | 数据处理方法、装置和系统 | |
CN107479981B (zh) | 一种基于异步调用实现同步调用的处理方法及装置 | |
CN110609749A (zh) | 一种分布式任务运行方法、系统及设备 | |
US9128754B2 (en) | Resource starvation management in a computer system | |
CN109947553B (zh) | 容器的进程调度方法、装置和计算机可读存储介质 | |
CN103064739B (zh) | 一种云计算中虚拟机的控制方法及装置 | |
CN114691241B (zh) | 任务执行方法、装置、电子设备及存储介质 | |
US20180373512A1 (en) | Method and device for simulating synchronous blocking in asynchronous environment, storage medium, server and terminal | |
CN115934656A (zh) | 信息处理方法、业务处理方法及装置 | |
CN111026526B (zh) | 程序的定时器配置方法、装置、存储介质及终端设备 | |
CN110968327B (zh) | 服务系统及其部署方法 | |
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 | |
CN113467901A (zh) | 一种任务调度的方法及相关设备 |
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 |