本發(fā)明涉及云計算管理技術(shù)領(lǐng)域,特別是指一種云計算環(huán)境下子進程維護方法。
背景技術(shù):
在云計算解決方案中,管理節(jié)點對實現(xiàn)節(jié)點(計算節(jié)點、存儲節(jié)點、網(wǎng)絡節(jié)點等)存在著大量的命令控制工作,尤其是實現(xiàn)端對于底層虛擬化的操作命令。通常為了實現(xiàn)程序的松耦合,對于底層的操作命令和管理端的程序是分離的,實現(xiàn)端對于底層的命令只負責調(diào)用,底層操作系統(tǒng)負責執(zhí)行,并返回結(jié)果。然而對于一些執(zhí)行時間較長的命令,比如拷貝鏡像、傳輸文件、打包等操作,無法通過實現(xiàn)端對其進行中斷、取消操作,比如關(guān)閉實現(xiàn)端進程時,理論上當前正在執(zhí)行的任務也應該關(guān)閉,并返回執(zhí)行失敗。目前對于這類情況只能通過底層操作系統(tǒng)執(zhí)行相關(guān)命令進行相關(guān)子進程的維護工作,這樣存在以下弊端:
1、是維護性差,需要進入每個計算節(jié)點查看需要停止的子進程,有可能找到的時候子進程已經(jīng)執(zhí)行完成;
2、不安全,容易產(chǎn)生僵尸進程,當實現(xiàn)端主進程由于維護需要而關(guān)閉,由實現(xiàn)端執(zhí)行的命令子進程有可能變成僵尸進程,從而影響系統(tǒng)正常使用;
為了從真正意義上實現(xiàn)對云計算環(huán)境下子進程的合理維護,需要一種當管理節(jié)點或者實現(xiàn)節(jié)點進程關(guān)閉時子進程自動關(guān)閉的維護機制。
技術(shù)實現(xiàn)要素:
本發(fā)明解決的技術(shù)問題在于提供一種云計算環(huán)境下子進程維護方法,解決傳統(tǒng)方法存在的不足,為云計算環(huán)境下子進程提供一種維護性高,安全性好的解決方案。
本發(fā)明解決上述問題的技術(shù)方案是,包括以下步驟:
所述方法包括如下步驟:
步驟1:管理節(jié)點及實現(xiàn)節(jié)點進程啟動后,注冊關(guān)閉進程掛鉤,用于處理子進程;
步驟2:子進程產(chǎn)生記錄至子進程Maps,銷毀時移出Maps;
步驟3:管理節(jié)點及實現(xiàn)節(jié)點進程通過關(guān)閉時,先調(diào)用掛鉤線程;
步驟4:執(zhí)行掛鉤線程,關(guān)閉子進程Maps里面所有記錄子進程。
所述的管理節(jié)點和實現(xiàn)節(jié)點分別是云計算解決方案中的管理模塊和實現(xiàn)模塊;
所述的管理模塊是指云計算解決方案中負責產(chǎn)生任務、發(fā)送任務、接收任務反饋的業(yè)務控制管理模塊,該模塊只負責產(chǎn)生任務,不負責任務實現(xiàn);
所述的實現(xiàn)模塊是云計算解決方案中負責消費任務,任務實現(xiàn)的業(yè)務功能模塊。
所述的進程掛鉤,是JAVA中Runtime.addShutdownHook方法,用來在jvm中增加一個關(guān)閉的鉤子;當程序正常退出,系統(tǒng)調(diào)用System.exit方法或虛擬機被關(guān)閉時才會執(zhí)行添加的shutdownHook線程;其中shutdownHook是一個已初始化但并不有啟動的線程,當JVM關(guān)閉的時候,會執(zhí)行系統(tǒng)中已經(jīng)設(shè)置的所有通過方法addShutdownHook添加的鉤子,當系統(tǒng)執(zhí)行完這些鉤子后,JVM才會關(guān)閉。
所述的子進程產(chǎn)生記錄至子進程Maps,銷毀時移出Maps;
所述的子進程,是云計算環(huán)境下一些通過管理節(jié)點或?qū)崿F(xiàn)節(jié)點發(fā)起的底層操作命令,產(chǎn)生的子進程;
所述的進程Maps,主要適用于記錄所有子進程的信息表,比如子進程的id,名稱,內(nèi)容等。
本發(fā)明的方法維護性好,主進程關(guān)閉時,會優(yōu)先關(guān)閉所有子進程,適用于云計算環(huán)境中執(zhí)行時間較長的命令。本發(fā)明的方法安全性高,避免了由于主進程關(guān)閉,而導致子進程變成僵尸進程的風險,提高了系統(tǒng)的穩(wěn)定性,降低子進程長時間駐留內(nèi)存,導致JVM虛擬機死機或者系統(tǒng)內(nèi)存利用率高的風險。
附圖說明
下面結(jié)合附圖對本發(fā)明進一步說明:
圖1為本發(fā)明的流程圖;
圖2為本發(fā)明的技術(shù)原理圖;
具體實施方式
如圖1、2所示,本發(fā)明主要核心是通過進程掛鉤來實現(xiàn),具體實施過程如下:
1、管理節(jié)點及實現(xiàn)節(jié)點進程啟動后,注冊關(guān)閉進程掛鉤,用于處理子進程;
Runtime對象的addShutdownHook(Thread hook)方法中注冊新的虛擬機來關(guān)閉掛鉤。Hook線程中實現(xiàn)環(huán)境清理工作。
2、子進程產(chǎn)生記錄至子進程Maps,銷毀時移出Maps;
3、管理節(jié)點及實現(xiàn)節(jié)點進程通過關(guān)閉時,先調(diào)用掛鉤線程;
4、執(zhí)行掛鉤線程,關(guān)閉子進程Maps里面所有記錄子進程。
比如創(chuàng)建虛擬機沒有進行鏡像cache時,會自動拷貝鏡像到cache目錄。在拷貝的過程中,通過kill實現(xiàn)端進程id、ctrl+C取消執(zhí)行時,相關(guān)dd進程消失。