本發(fā)明涉及軟件編譯技術(shù),尤其涉及一種jackserver實例的管理方法和裝置。
背景技術(shù):
優(yōu)般圖(ubuntu)是一種linux操作系統(tǒng),也稱為友幫拓或烏班圖,因其開源特性被廣泛使用。例如,安卓(android)系統(tǒng)手機也使用ubuntu進(jìn)行程序開發(fā)。
目前,有多個軟件工程師可能會同時在一個ubuntu服務(wù)器進(jìn)行程序開發(fā),因而需要在ubuntu服務(wù)器上創(chuàng)建多個用戶。每個用戶在程序開發(fā)的過程中都會進(jìn)行程序編譯,例如android7.0以后的版本的android編譯程序需要使用jackserver進(jìn)行程序編譯,而jackserver默認(rèn)一個端口只能一個用戶使用,且每一個用戶編譯時會創(chuàng)建一個jackserver實例。編譯完成后jackserver并不會自動清除,而是長期占用大量內(nèi)存。
隨著用戶數(shù)量的增多,大量的jackserver實例長期占用ubuntu服務(wù)器的內(nèi)存,使得ubuntu服務(wù)器運行緩慢,影響程序開發(fā)的進(jìn)度。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種jackserver實例的管理方法和裝置,以實現(xiàn)自動清除編譯結(jié)束后不需要的jackserver實例,有效節(jié)約內(nèi)存,提升系統(tǒng)運行速度,提高開發(fā)效率。
第一方面,本發(fā)明實施例提供的一種jackserver實例的管理方法,包括:
在android項目編譯結(jié)束后,檢查當(dāng)前jackserver實例的占用情況;
根據(jù)當(dāng)前jackserver實例的占用情況判斷當(dāng)前jackserver實例是否被占用;
若當(dāng)前jackserver實例被占用,則重新檢查當(dāng)前jackserver實例的占用情況;
若當(dāng)前jackserver實例未被占用,則結(jié)束當(dāng)前jackserver實例。
可選地,在檢查當(dāng)前jackserver實例的占用情況之前,還包括:
檢查android項目是否編譯結(jié)束,若android項目未編譯結(jié)束,則等待android項目編譯結(jié)束。
可選地,所述檢查當(dāng)前jackserver實例的占用情況,包括:
檢測當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù);
所述根據(jù)當(dāng)前jackserver實例的占用情況判斷當(dāng)前jackserver實例是否被占用,包括:
判斷所述用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)是否大于0;
若所述用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)等于0,則確定當(dāng)前jackserver實例未被占用;
若所述用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)大于0,則確定當(dāng)前jackserver實例被占用。
可選地,所述檢測當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù),包括:
查詢所述用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中是否包含預(yù)設(shè)的字符串,所述預(yù)設(shè)的字符串包含以下中的任意一個:make、mm或mmm;
當(dāng)所述用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中包含所述預(yù)設(shè)的字符串時,則用戶進(jìn)程中包含的編譯進(jìn)程個數(shù)的統(tǒng)計值自增1。
可選地,所述若當(dāng)前jackserver實例未被占用,則結(jié)束當(dāng)前jackserver實例進(jìn)程,包括:
運行關(guān)閉jackserver實例執(zhí)行指令,以結(jié)束當(dāng)前jackserver實例進(jìn)程。
可選地,所述檢查jackserver實例對應(yīng)的項目是否編譯結(jié)束,包括:
判斷所述jackserver實例對應(yīng)的項目是否生成app文件或者image文件;
若所述jackserver實例對應(yīng)的項目生成了app文件或者image文件,則確定所述jackserver實例對應(yīng)的項目已編譯結(jié)束。
第二方面,本發(fā)明實施例提供一種jackserver實例的管理裝置,包括:
檢測模塊,用于在android項目編譯結(jié)束后,檢查當(dāng)前jackserver實例的占用情況;
判斷模塊,用于根據(jù)當(dāng)前jackserver實例的占用情況判斷當(dāng)前jackserver實例是否被占用;
檢測模塊,還用于在當(dāng)前jackserver實例被占用時,重新檢查當(dāng)前jackserver實例的占用情況;
結(jié)束模塊,用于在當(dāng)前jackserver實例未被占用時,則結(jié)束當(dāng)前jackserver實例。
可選地,所述檢測模塊,還用于:
在檢查當(dāng)前jackserver實例的占用情況之前,檢查android項目是否編譯結(jié)束,若android項目未編譯結(jié)束,則等待android項目編譯結(jié)束。
可選地,所述檢測模塊,具體用于:檢測當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù);
所述判斷模塊,具體用于:判斷所述用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)是否大于0;
若所述用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)等于0,則確定當(dāng)前jackserver實例未被占用;
若所述用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)大于0,則確定當(dāng)前jackserver實例被占用。
可選地,所述檢測模塊,具體用于:查詢所述用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中是否包含預(yù)設(shè)的字符串,所述預(yù)設(shè)的字符串包含以下中的任意一個:make、mm或mmm;
當(dāng)所述用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中包含所述預(yù)設(shè)的字符串時,則用戶進(jìn)程中包含的編譯進(jìn)程個數(shù)的統(tǒng)計值自增1。
可選地,所述結(jié)束模塊,還用于運行關(guān)閉jackserver實例執(zhí)行指令,以結(jié)束當(dāng)前jackserver實例進(jìn)程。
可選地,所述檢測模塊,還用于:
判斷所述jackserver實例對應(yīng)的項目是否生成app文件或者image文件;
若所述jackserver實例對應(yīng)的項目生成了app文件或者image文件,則確定所述jackserver實例對應(yīng)的項目已編譯結(jié)束。
本發(fā)明提供的jackserver實例的管理方法和裝置,通過在android項目編譯結(jié)束后,檢查當(dāng)前jackserver實例的占用情況,若檢查確定當(dāng)前jackserver實例未被占用,則結(jié)束當(dāng)前jackserver實例。從而能夠在編譯結(jié)束后,自動釋放未被占用的jackserver實例占用的內(nèi)存,從而能夠有效節(jié)約系統(tǒng)內(nèi)存,提升系統(tǒng)運行速度,提高程序開發(fā)的效率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例一提供的jackserver實例的管理方法的流程圖;
圖2為本發(fā)明實施例二提供的jackserver實例的管理方法的流程圖;
圖3為本發(fā)明實施例三提供的jackserver實例的管理方法的流程圖;
圖4為本發(fā)明實施例一提供的jackserver實例的管理裝置的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
圖1為本發(fā)明實施例一提供的jackserver實例的管理方法的流程圖,如圖1所示,本實施例的方法可以包括:
s101、在android項目編譯結(jié)束后,檢查當(dāng)前jackserver實例的占用情況。
本實施例中,檢查當(dāng)前jackserver實例的占用情況,具體為:檢查當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)。在服務(wù)器中,每個jackserver實例對應(yīng)一個用戶,用戶的用戶進(jìn)程中包括多個進(jìn)程,多個進(jìn)程中可能包括編譯進(jìn)程以及其他進(jìn)程。
s102、根據(jù)當(dāng)前jackserver實例的占用情況判斷當(dāng)前jackserver實例是否被占用。
在當(dāng)前jackserver實例的占用情況為當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中的編譯進(jìn)程數(shù)量時,根據(jù)當(dāng)前jackserver實例的占用情況判斷當(dāng)前jackserver實例是否被占用,具體為:判斷用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)是否大于0。若用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)等于0,則確定當(dāng)前jackserver實例未被占用;若用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)大于0,則確定當(dāng)前jackserver實例被占用。
若當(dāng)前jackserver實例被占用時,則返回執(zhí)行步驟s101,若當(dāng)前jackserver實例未被占用時,執(zhí)行步驟s103。
可選地,本實施例中,當(dāng)前jackserver實例被占用時,可以間隔預(yù)設(shè)時間重新檢查當(dāng)前jackserver實例的占用情況;或者,以計算機運行的最小時間差(例如毫秒級)重新檢查當(dāng)前jackserver實例的占用情況。
s103、結(jié)束當(dāng)前jackserver實例。
可以通過運行關(guān)閉jackserver實例執(zhí)行指令,結(jié)束當(dāng)前jackserver實例進(jìn)程。該關(guān)閉jackserver實例執(zhí)行指令例如是:jack-adminkill-server指令。本實施例中,結(jié)束當(dāng)前jackserver實例即釋放當(dāng)前jackserver實例所占用的內(nèi)存。
本實施例,通過在android項目編譯結(jié)束后,檢查當(dāng)前jackserver實例的占用情況,若檢查確定當(dāng)前jackserver實例未被占用,則結(jié)束當(dāng)前jackserver實例。從而能夠在編譯結(jié)束后,自動釋放未被占用的jackserver實例占用的內(nèi)存,從而能夠有效節(jié)約系統(tǒng)內(nèi)存,提升系統(tǒng)運行速度,提高程序開發(fā)的效率。
圖2為本發(fā)明實施例二提供的jackserver實例的管理方法的流程圖,如圖2所示,本實施例的方法在圖1所示方法的基礎(chǔ)上,可以包括:
s201、檢查android項目是否編譯結(jié)束,若android項目未編譯結(jié)束,則等待android項目編譯結(jié)束。
具體地,判斷android項目是否生成app文件或者image文件;若android項目生成了app文件或者image文件,則確定android項目已編譯結(jié)束。若android項目未生產(chǎn)app文件或者image文件,則確定android項目沒有編譯結(jié)束。
s202、在android項目編譯結(jié)束后,檢查當(dāng)前jackserver實例的占用情況。
s203、根據(jù)當(dāng)前jackserver實例的占用情況判斷當(dāng)前jackserver實例是否被占用;若當(dāng)前jackserver實例被占用,則返回執(zhí)行步驟s202;若當(dāng)前jackserver實例未被占用,則執(zhí)行步驟s204。
s204、結(jié)束當(dāng)前jackserver實例進(jìn)程。
本實施例中,步驟s202-s204的具體實現(xiàn)過程參見圖1所示方法中的相關(guān)描述,此處不再贅述。
圖3為本發(fā)明實施例三提供的jackserver實例的管理方法的流程圖,如圖3所示,本實施例的方法在圖1所示方法的基礎(chǔ)上,可以包括:
s301、在android項目編譯結(jié)束后,檢測當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)。
本實施例中,通過統(tǒng)計當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù),檢測當(dāng)前jackserver實例的占用情況。
可選地,檢測當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù),具體為:查詢用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中是否包含預(yù)設(shè)的字符串,該預(yù)設(shè)的字符串包含以下中的任意一個:make、mm或mmm;當(dāng)用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中包含該預(yù)設(shè)的字符串時,則用戶進(jìn)程中包含的編譯進(jìn)程個數(shù)的統(tǒng)計值自增1。
s302、判斷用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)是否大于0。
本實施例中,根據(jù)用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)是否為0來判斷當(dāng)前jackserver實例是否被占用。若用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)等于0,則確定jackserver實例沒有被占用,執(zhí)行步驟s303;若用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)大于0,則確定jackserver實例被占用,返回執(zhí)行步驟s301。
s303、結(jié)束當(dāng)前jackserver實例進(jìn)程。
本實施例中,步驟s303的具體實現(xiàn)過程參見圖1所示方法中的相關(guān)描述,此處不再贅述。
圖4為本發(fā)明實施例一提供的jackserver實例的管理裝置的結(jié)構(gòu)示意圖,如圖4所示,本實施例的裝置可以包括:檢測模塊10、判斷模塊20和結(jié)束模塊30。檢測模塊10,用于在android項目編譯結(jié)束后,檢查當(dāng)前jackserver實例的占用情況。判斷模塊20,用于根據(jù)當(dāng)前jackserver實例的占用情況判斷當(dāng)前jackserver實例是否被占用。判斷模塊,還用于在當(dāng)前jackserver實例被占用時,重新檢查當(dāng)前jackserver實例的占用情況。結(jié)束模塊,用于在當(dāng)前jackserver實例未被占用時,結(jié)束當(dāng)前jackserver實例進(jìn)程。
可選地,檢測模塊10,還用于:在檢查當(dāng)前jackserver實例的占用情況之前,檢查android項目是否編譯結(jié)束,若android項目未編譯結(jié)束,則等待android項目編譯結(jié)束。
可選地,檢測模塊10,具體用于:檢測當(dāng)前jackserver實例對應(yīng)用戶的用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù);
可選地,判斷模塊20,具體用于:判斷用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)是否大于0;在用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)等于0時,確定當(dāng)前jackserver實例未被占用;在用戶進(jìn)程中包含的編譯進(jìn)程的個數(shù)大于0時,確定當(dāng)前jackserver實例被占用。
可選地,檢測模塊10,具體用于:查詢用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中是否包含預(yù)設(shè)的字符串,預(yù)設(shè)的字符串包含以下中的任意一個:make、mm或mmm;當(dāng)用戶進(jìn)程中進(jìn)程的指令的抬頭字符串中包含預(yù)設(shè)的字符串時,則用戶進(jìn)程中包含的編譯進(jìn)程個數(shù)的統(tǒng)計值自增1。
本實施例可以執(zhí)行上述圖1-圖3中任意一項所示的方法中的技術(shù)方案,其實現(xiàn)過程和技術(shù)效果與上述方法類似,此處不再贅述。
此外,本申請實施例還提供一種計算機可讀存儲介質(zhì),計算機可讀存儲介質(zhì)中存儲有計算機執(zhí)行指令,當(dāng)用戶設(shè)備的至少一個處理器執(zhí)行該計算機執(zhí)行指令時,用戶設(shè)備執(zhí)行上述各種可能的方法。
其中,計算機可讀介質(zhì)包括計算機存儲介質(zhì)和通信介質(zhì),其中通信介質(zhì)包括便于從一個地方向另一個地方傳送計算機程序的任何介質(zhì)。存儲介質(zhì)可以是通用或?qū)S糜嬎銠C能夠存取的任何可用介質(zhì)。一種示例性的存儲介質(zhì)耦合至處理器,從而使處理器能夠從該存儲介質(zhì)讀取信息,且可向該存儲介質(zhì)寫入信息。當(dāng)然,存儲介質(zhì)也可以是處理器的組成部分。處理器和存儲介質(zhì)可以位于asic中。另外,該asic可以位于用戶設(shè)備中。當(dāng)然,處理器和存儲介質(zhì)也可以作為分立組件存在于通信設(shè)備中。
本領(lǐng)域普通技術(shù)人員可以理解:實現(xiàn)上述各方法實施例的全部或部分步驟可以通過程序指令相關(guān)的硬件來完成。前述的程序可以存儲于一計算機可讀取存儲介質(zhì)中。該程序在執(zhí)行時,執(zhí)行包括上述各方法實施例的步驟;而前述的存儲介質(zhì)包括:rom、ram、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
最后應(yīng)說明的是:以上各實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述各實施例對本發(fā)明進(jìn)行了詳細(xì)的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對前述各實施例所記載的技術(shù)方案進(jìn)行修改,或者對其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的范圍。