亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種移動(dòng)終端的控制方法及控制裝置的制造方法

文檔序號(hào):10569789閱讀:178來(lái)源:國(guó)知局
一種移動(dòng)終端的控制方法及控制裝置的制造方法
【專利摘要】本發(fā)明提供一種移動(dòng)終端的控制方法及裝置,該方法包括在當(dāng)前進(jìn)程退出時(shí),且判斷當(dāng)前進(jìn)程成為孤兒進(jìn)程后,判斷當(dāng)前進(jìn)程所在的進(jìn)程組是否為孤兒進(jìn)程組,如是,進(jìn)一步判斷進(jìn)程組是否滿足終止運(yùn)行的條件,如是,向進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令;進(jìn)程組滿足終止運(yùn)行的條件包括:進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,并且進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程。該裝置包括孤兒進(jìn)程組判斷模塊、終止運(yùn)行條件判斷模塊、指令發(fā)送模塊,用于實(shí)現(xiàn)上述的控制方法。本發(fā)明能有效關(guān)閉孤兒進(jìn)程組中處于停止?fàn)顟B(tài)的進(jìn)程,并且可以避免操作系統(tǒng)異常重啟。
【專利說(shuō)明】
一種移動(dòng)終端的控制方法及控制裝置
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及移動(dòng)終端的控制領(lǐng)域,具體地,是一種提高移動(dòng)終端內(nèi)存使用效率、避免移動(dòng)終端異常重啟的移動(dòng)終端控制方法以及實(shí)現(xiàn)這種控制方法的控制裝置。
【背景技術(shù)】
[0002]智能手機(jī)、平板電腦等移動(dòng)終端設(shè)備是人們?nèi)粘I罱?jīng)常使用的移動(dòng)終端,而現(xiàn)在大部分移動(dòng)終端的操作系統(tǒng)是基于Linux系統(tǒng)開發(fā)的。移動(dòng)終端均運(yùn)行有操作系統(tǒng),如安卓操作系統(tǒng),大量第三方應(yīng)用程序運(yùn)行在操作系統(tǒng)上。
[0003]在Linux系統(tǒng)下,移動(dòng)終端初始運(yùn)行時(shí)首先啟動(dòng)初始化進(jìn)程,S卩;Lnit進(jìn)程,初始化進(jìn)程是操作系統(tǒng)的基礎(chǔ)進(jìn)程,并且孵化出孵化進(jìn)程,即zygote進(jìn)程,移動(dòng)終端大部分系統(tǒng)程序、第三方程序均由孵化進(jìn)程孵化形成。
[0004]如圖1所示,移動(dòng)終端運(yùn)行時(shí)初始化進(jìn)程10孵化產(chǎn)生孵化進(jìn)程11,再由孵化進(jìn)程11孵化形成諸如(30111.七611。6111:.1]1013;[1699、831116、85^6111_861^1'等進(jìn)程,例如,831116進(jìn)程是第三方的游戲程序的進(jìn)程,game進(jìn)程又繼續(xù)孵化形成進(jìn)程A、進(jìn)程B以及進(jìn)程C等多個(gè)進(jìn)程,其中,孵化形成下一進(jìn)程的進(jìn)程被稱為父進(jìn)程,如game進(jìn)程為進(jìn)程A的父進(jìn)程。
[0005]Linux系統(tǒng)通過(guò)進(jìn)程組對(duì)進(jìn)程進(jìn)行管理,一個(gè)進(jìn)程組內(nèi)通常包括多個(gè)進(jìn)程。通常,由同一父進(jìn)程孵化形成的多個(gè)進(jìn)程在同一進(jìn)程組內(nèi),例如,進(jìn)程A、進(jìn)程B以及進(jìn)程C均由game進(jìn)程孵化,也就是進(jìn)程A、進(jìn)程B以及進(jìn)程C的父進(jìn)程均為game進(jìn)程,因此,進(jìn)程A、進(jìn)程B以及進(jìn)程C在同一進(jìn)程組內(nèi)。在安卓系統(tǒng)的機(jī)制下,由于game進(jìn)程由孵化進(jìn)程11所孵化,而進(jìn)程A、進(jìn)程B以及進(jìn)程C又由game進(jìn)程所孵化,通常將進(jìn)程A、進(jìn)程B、進(jìn)程C設(shè)置在與game進(jìn)程相同的進(jìn)程組內(nèi)。
[0006]孵化進(jìn)程11啟動(dòng)每個(gè)APP進(jìn)程后,都會(huì)強(qiáng)制設(shè)定APP進(jìn)程的進(jìn)程組為自己,并且,每個(gè)進(jìn)程孵化新的進(jìn)程的時(shí)候都會(huì)重新設(shè)置其進(jìn)程組,且將新的進(jìn)程組的ID設(shè)定為孵化出來(lái)的進(jìn)程的父進(jìn)程的ID13APP進(jìn)程通常是由第三方程序,如各種APP運(yùn)行時(shí)所產(chǎn)生的進(jìn)程。
[0007]然而,在移動(dòng)終端運(yùn)行過(guò)程中,一些進(jìn)程可能發(fā)生異常退出的情況下,就會(huì)有可能導(dǎo)致孤兒進(jìn)程組的問(wèn)題。例如,game進(jìn)程運(yùn)行過(guò)程中發(fā)生崩潰并異常退出,其孵化的諸如進(jìn)程A、進(jìn)程B以及進(jìn)程C等多個(gè)進(jìn)程有可能沒(méi)有跟隨game進(jìn)程同步退出。假設(shè)進(jìn)程A沒(méi)有退出,此時(shí),由于進(jìn)程A的父進(jìn)程,即game進(jìn)程已經(jīng)終止,導(dǎo)致進(jìn)程A成為一個(gè)孤兒進(jìn)程,因此,孤兒進(jìn)程是父進(jìn)程已經(jīng)終止的進(jìn)程。通常,孤兒進(jìn)程由初始化進(jìn)程10“收養(yǎng)”,由于初始化進(jìn)程10的ID為I,因此被收養(yǎng)的孤兒進(jìn)程的父進(jìn)程的ID也就更新為I。
[0008]由于進(jìn)程A變成了孤兒進(jìn)程,進(jìn)程A所在的進(jìn)程組可能變成一個(gè)孤兒進(jìn)程組。孤兒進(jìn)程組的成員的父進(jìn)程要么是該進(jìn)程組的成員,要么父進(jìn)程是初始化進(jìn)程10。也就是,一個(gè)進(jìn)程組不是孤兒進(jìn)程組的條件是,該進(jìn)程組中有一個(gè)進(jìn)程,其父進(jìn)程屬于同一個(gè)會(huì)話的另外一個(gè)進(jìn)程組,其中,父進(jìn)程為初始化進(jìn)程10的情況除外。
[0009]由于位于孤兒進(jìn)程組之外的進(jìn)程不能監(jiān)控該孤兒進(jìn)程組中的任何已經(jīng)處于停止(stop)狀態(tài)的進(jìn)程,同時(shí)也不能向這些處于停止?fàn)顟B(tài)的進(jìn)程發(fā)送繼續(xù)執(zhí)行(sigcont)的指令,以使得這些處于停止?fàn)顟B(tài)的進(jìn)程可以恢復(fù)運(yùn)行。這樣,可能會(huì)導(dǎo)致這些在孤兒進(jìn)程組中且處于停止?fàn)顟B(tài)的進(jìn)程永遠(yuǎn)游蕩在系統(tǒng)中,占據(jù)著系統(tǒng)資源無(wú)法釋放。
[0010]然而,移動(dòng)終端的系統(tǒng)資源,如內(nèi)存資源是有限,如系統(tǒng)存在的孤兒進(jìn)程組中處于停止?fàn)顟B(tài)的進(jìn)程無(wú)法釋放系統(tǒng)資源,容易導(dǎo)致移動(dòng)終端運(yùn)行緩慢,導(dǎo)致移動(dòng)終端運(yùn)行時(shí)出現(xiàn)卡頓的現(xiàn)象,影響移動(dòng)終端的使用。

【發(fā)明內(nèi)容】

[0011]本發(fā)明的主要目的是提供一種有效釋放孤兒進(jìn)程組所占用的系統(tǒng)資源的移動(dòng)終端控制方法。
[0012]本發(fā)明的另一目的是提供一種減少移動(dòng)終端異常重啟的移動(dòng)終端控制方法。
[0013]本發(fā)明的再一目的是提供一種避免移動(dòng)終端運(yùn)行緩慢的移動(dòng)終端控制裝置。
[0014]為了實(shí)現(xiàn)上述的主要目的,本發(fā)明提供的移動(dòng)終端控制方法包括在第一進(jìn)程退出時(shí),且判斷第一進(jìn)程成為孤兒進(jìn)程后,判斷第一進(jìn)程所在的進(jìn)程組是否為孤兒進(jìn)程組,如是,判斷進(jìn)程組是否滿足終止運(yùn)行的條件,如是,向進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令,進(jìn)程組滿足終止運(yùn)行的條件包括:進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,并且進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程。在本發(fā)明一個(gè)實(shí)施例中,所述第一進(jìn)程可以為當(dāng)前進(jìn)程。
[0015]由上述方案可見,一旦判斷孤兒進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,為了確保這些進(jìn)程繼續(xù)運(yùn)行,由在孤兒進(jìn)程組內(nèi)沒(méi)有處于停止?fàn)顟B(tài)的進(jìn)程向進(jìn)程組中所有進(jìn)程發(fā)出終止運(yùn)行的指令,如繼續(xù)執(zhí)行的指令,這樣可以使得原本處于停止?fàn)顟B(tài)的進(jìn)程繼續(xù)執(zhí)行,在原本處于停止?fàn)顟B(tài)的進(jìn)程繼續(xù)執(zhí)行后,可以繼續(xù)運(yùn)行至正常退出,并且釋放占用的系統(tǒng)資源,從而避免處于停止?fàn)顟B(tài)的進(jìn)程永遠(yuǎn)游蕩在系統(tǒng)外而無(wú)法釋放占用的系統(tǒng)資源。一旦原本處于停止?fàn)顟B(tài)的進(jìn)程正常退出后,其占用的系統(tǒng)資源,如內(nèi)存資源被釋放,可以提高移動(dòng)終端的運(yùn)行速度,避免移動(dòng)終端運(yùn)行時(shí)出現(xiàn)卡頓的現(xiàn)象。
[0016]并且,在發(fā)出終止運(yùn)行的指令后,其他正常執(zhí)行的進(jìn)程也可能會(huì)退出。然而,如果孤兒進(jìn)程組的組長(zhǎng)是孵化進(jìn)程時(shí),則進(jìn)程組內(nèi)可能還包括諸如SyStem_Server等系統(tǒng)核心進(jìn)程,如果關(guān)閉孤兒進(jìn)程組,將導(dǎo)致JAVA世界結(jié)束并導(dǎo)致移動(dòng)終端重新啟動(dòng),使用者將發(fā)現(xiàn)移動(dòng)終端發(fā)生異常重啟的情況。
[0017]應(yīng)用本發(fā)明的方案,如果判斷孤兒進(jìn)程組的組長(zhǎng)是孵化進(jìn)程時(shí),則不發(fā)出終止運(yùn)行的指令,從而避免諸如system_server等系統(tǒng)核心進(jìn)程所在的進(jìn)程組被關(guān)閉,防止移動(dòng)終端發(fā)生異常重啟的情況。
[0018]進(jìn)一步的方案是,向進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令包括進(jìn)程向進(jìn)程組中的發(fā)送掛斷的指令以及繼續(xù)執(zhí)行指令。
[0019]由此可見,如果孤兒進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程時(shí),進(jìn)程組內(nèi)的進(jìn)程將接收到掛斷以及繼續(xù)執(zhí)行兩條指令,如果一個(gè)進(jìn)程接收到掛斷的執(zhí)行并且不做特別的處理,將默認(rèn)退出。這樣,可以確保孤兒進(jìn)程組內(nèi)的進(jìn)程要么退出,要么繼續(xù)執(zhí)行,避免有進(jìn)程處于停止?fàn)顟B(tài)。
[0020]可選的方案是,向進(jìn)程組中的進(jìn)程發(fā)送運(yùn)行的終止指令包括進(jìn)程向進(jìn)程組中的進(jìn)程發(fā)送繼續(xù)執(zhí)行指令。
[0021]由于處于停止?fàn)顟B(tài)的進(jìn)程接收到繼續(xù)執(zhí)行的后將恢復(fù)執(zhí)行,這樣可以避免處于停止?fàn)顟B(tài)的進(jìn)程占用系統(tǒng)資源。
[0022]更進(jìn)一步的方案是,判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程的步驟是:根據(jù)進(jìn)程組的名稱和/或進(jìn)程組的屬性判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程。
[0023]可見,通過(guò)進(jìn)程組的名稱或者屬性可以方便、快捷、準(zhǔn)確地判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程,提高判斷效率。
[0024]更進(jìn)一步的方案是,判斷進(jìn)程組是否滿足終止運(yùn)行的條件的步驟是:判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程,如否,則進(jìn)一步判斷進(jìn)程組內(nèi)是否有處于停止?fàn)顟B(tài)的進(jìn)程,如是,則判斷進(jìn)程組滿足終止運(yùn)行的條件。
[0025]可見,在判斷孤兒進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程周,再判斷進(jìn)程組內(nèi)是否有處于停止?fàn)顟B(tài)的進(jìn)程,由于判斷進(jìn)程組組長(zhǎng)的時(shí)間、消耗的資源較少,因此先判斷孤兒進(jìn)程組的組長(zhǎng)將可以提尚移動(dòng)終端的處理效率。
[0026]為實(shí)現(xiàn)上述的另一目的,本發(fā)明提供的移動(dòng)終端控制方法包括孤兒進(jìn)程組判斷模塊,在第一進(jìn)程退出時(shí)并且判斷第一進(jìn)程成為孤兒進(jìn)程后,判斷第一進(jìn)程所在的進(jìn)程組是否為孤兒進(jìn)程組;還包括終止運(yùn)行條件判斷模塊,在判斷進(jìn)程所在的進(jìn)程組為孤兒進(jìn)程組后,進(jìn)一步判斷進(jìn)程組是否滿足終止運(yùn)行的條件,進(jìn)程組滿足終止運(yùn)行的條件包括:進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,并且進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程;還包括指令發(fā)送模塊,在判斷進(jìn)程組滿足終止運(yùn)行條件時(shí),向進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令。
[0027]由上述方案可見,一旦在孤兒進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,則可以通過(guò)孤兒進(jìn)程組內(nèi)的進(jìn)程向進(jìn)程組中所有的進(jìn)程發(fā)送終止運(yùn)行的指令,從而確保處于停止?fàn)顟B(tài)的進(jìn)程繼續(xù)執(zhí)行或者直接誒退出,由此釋放占用的系統(tǒng)資源,避免移動(dòng)終端運(yùn)行緩慢。
[0028]并且,通過(guò)屏蔽向進(jìn)程組組長(zhǎng)為孵化進(jìn)程的進(jìn)程組的進(jìn)程發(fā)送終止運(yùn)行指令,可以避免因諸如systenuserver等核心進(jìn)程所在的進(jìn)程組被關(guān)閉而導(dǎo)致移動(dòng)終端重新啟動(dòng)的問(wèn)題,確保移動(dòng)終端運(yùn)行的穩(wěn)定性。
【附圖說(shuō)明】
[0029]圖1是初始化進(jìn)程與孵化進(jìn)程所孵化的進(jìn)程的結(jié)構(gòu)示意圖。
[0030]圖2是本發(fā)明移動(dòng)終端控制裝置實(shí)施例的結(jié)構(gòu)框圖。
[0031]圖3是應(yīng)用本發(fā)明移動(dòng)終端控制方法實(shí)施例的初始化進(jìn)程與孵化進(jìn)程所孵化的進(jìn)程第一狀態(tài)下的結(jié)構(gòu)示意圖。
[0032]圖4是應(yīng)用本發(fā)明移動(dòng)終端控制方法實(shí)施例的初始化進(jìn)程與孵化進(jìn)程所孵化的進(jìn)程第二狀態(tài)下的結(jié)構(gòu)示意圖。
[0033]圖5是應(yīng)用本發(fā)明移動(dòng)終端控制方法實(shí)施例的初始化進(jìn)程與孵化進(jìn)程所孵化的進(jìn)程第三狀態(tài)下的結(jié)構(gòu)示意圖。
[0034]圖6是本發(fā)明移動(dòng)終端控制方法實(shí)施例的流程圖。
[0035]以下結(jié)合附圖及實(shí)施例對(duì)本發(fā)明作進(jìn)一步說(shuō)明。
【具體實(shí)施方式】
[0036]本發(fā)明的移動(dòng)終端控制方法可以應(yīng)用在諸如智能手機(jī)、平板電腦等智能移動(dòng)終端上,這些智能移動(dòng)終端運(yùn)行有操作系統(tǒng),優(yōu)選地,操作系統(tǒng)是基于Linux系統(tǒng)開發(fā)的操作系統(tǒng)。并且,在操作系統(tǒng)上運(yùn)行有大量程序,如系統(tǒng)程序、第三方開發(fā)的應(yīng)用程序等,系統(tǒng)程序、應(yīng)用程序運(yùn)行時(shí)產(chǎn)生大量的進(jìn)程。
[0037]移動(dòng)終端啟動(dòng)時(shí)將運(yùn)行初始化進(jìn)程init,并且由初始化進(jìn)程孵化形成孵化進(jìn)程zygote,再由孵化進(jìn)程孵化形成其他系統(tǒng)進(jìn)程、第三方程序的進(jìn)程,且系統(tǒng)進(jìn)程、第三方程序的進(jìn)程也可能進(jìn)一步孵化形成其他進(jìn)程。大量的進(jìn)程將形成多個(gè)進(jìn)程組,每一個(gè)進(jìn)程組中包含有一個(gè)或多個(gè)進(jìn)程,通常,同一個(gè)進(jìn)程組的進(jìn)程由同一個(gè)進(jìn)程孵化而成,且孵化其他進(jìn)程的進(jìn)程成為其孵化所形成的進(jìn)程的父進(jìn)程。
[0038]由于移動(dòng)終端運(yùn)行時(shí)可能產(chǎn)生孤兒進(jìn)程以及孤兒進(jìn)程組的問(wèn)題,因此,本發(fā)明的移動(dòng)終端控制裝置運(yùn)行在移動(dòng)終端上,并且用于解決孤兒進(jìn)程組占用系統(tǒng)資源無(wú)法釋放的問(wèn)題。參見圖2,移動(dòng)終端控制裝置具有孤兒進(jìn)程組判斷模塊20、終止運(yùn)行條件判斷模塊21、指令發(fā)送模塊22。
[0039]孤兒進(jìn)程組判斷模塊20在當(dāng)前的進(jìn)程退出時(shí),用于判斷當(dāng)前的進(jìn)程組是否為孤兒進(jìn)程組。通常,一個(gè)進(jìn)程的父進(jìn)程已經(jīng)異常退出,則該進(jìn)程已經(jīng)變?yōu)楣聝哼M(jìn)程,此時(shí),需要對(duì)孤兒進(jìn)程所在的進(jìn)程組進(jìn)行判斷,判斷該進(jìn)程組是否為孤兒進(jìn)程組。對(duì)進(jìn)程組進(jìn)行判斷時(shí),對(duì)進(jìn)程組內(nèi)的成員進(jìn)行逐一判斷,即在判斷該進(jìn)程組的成員的父進(jìn)程為同一進(jìn)程組的成員,或者進(jìn)程組的成員的父進(jìn)程不是該進(jìn)程組所屬會(huì)話的成員,或者進(jìn)程組的成員的父進(jìn)程就是初始化進(jìn)程init時(shí),則判定該進(jìn)程組已經(jīng)成為孤兒進(jìn)程組。
[0040]例如,如圖3所示,移動(dòng)終端啟動(dòng)后首先運(yùn)行初始化進(jìn)程10,并且由初始化進(jìn)程10孵化形成孵化進(jìn)程11,孵化進(jìn)程11孵化就形成諸如systenuserver等系統(tǒng)進(jìn)程,也孵化形成諸如game等第三方游戲程序的進(jìn)程,也就是APP進(jìn)程。并且,game進(jìn)程還可以進(jìn)一步孵化形成諸如saf e_debug等進(jìn)程。saf e_debug進(jìn)程用于監(jiān)測(cè)game進(jìn)程的狀態(tài),并收集異常信息,一旦game進(jìn)程異常,可重啟game進(jìn)程,從而恢復(fù)game進(jìn)程。
[0041]在移動(dòng)終端運(yùn)行過(guò)程中,一旦game進(jìn)程出現(xiàn)異常并且退出,則由于game進(jìn)程孵化的進(jìn)程saf e_debug進(jìn)程將成為孤兒進(jìn)程,如圖4所示,此時(shí),safe_debug進(jìn)程將被初始化進(jìn)程10“收養(yǎng)”,也就是safe_debug進(jìn)程的父進(jìn)程變成初始化進(jìn)程10。由于safe_debug進(jìn)程已經(jīng)成為孤兒進(jìn)程,系統(tǒng)對(duì)saf e_debug進(jìn)程所在的進(jìn)程組進(jìn)行檢測(cè)時(shí),將判斷safe_debug進(jìn)程所在的進(jìn)程組成為孤兒進(jìn)程組。
[0042]由于safe_debug進(jìn)程用于監(jiān)測(cè)game進(jìn)程的狀態(tài),在game進(jìn)程異常退出后,safe-debug進(jìn)程監(jiān)測(cè)到game進(jìn)程已經(jīng)異常退出,將記錄異常狀態(tài),然后重新game進(jìn)程的主程序,如圖5所示。在game進(jìn)程的主程序重新啟動(dòng)后,saf e_debug進(jìn)程將自行退出。
[0043]然而,由于saf e-debug進(jìn)程成為孤J L進(jìn)程,且所在的進(jìn)程組成為孤J L進(jìn)程組,為了避免safe-debug進(jìn)程所在的進(jìn)程組有停止?fàn)顟B(tài)的進(jìn)程占用大量的系統(tǒng)資源,需要對(duì)進(jìn)程組的成員進(jìn)行檢測(cè),因此,終止運(yùn)行條件判斷模塊21在孤兒進(jìn)程退出過(guò)程中,對(duì)孤兒進(jìn)程組中的進(jìn)程進(jìn)行檢測(cè),判斷孤兒進(jìn)程組是否滿足終止運(yùn)行的條件,如判斷孤兒進(jìn)程組中是否存在處于停止?fàn)顟B(tài)的進(jìn)程。終止運(yùn)行條件判斷模塊21通過(guò)查詢各個(gè)進(jìn)程的狀態(tài)信息來(lái)判斷進(jìn)程的狀態(tài)。
[0044]一旦判斷有處于停止?fàn)顟B(tài)的進(jìn)程,指令發(fā)送模塊22執(zhí)行指令發(fā)送的操作,由孤兒進(jìn)程向孤兒進(jìn)程組中所有進(jìn)程連續(xù)發(fā)送兩條指令,分別sighup指令以及sigcont指令。Sighup指令是掛斷指令,而sigcont指令是繼續(xù)執(zhí)行指令,進(jìn)程接收到掛斷指令以及繼續(xù)執(zhí)行指令后,要么退出,要么繼續(xù)進(jìn)行,而不會(huì)繼續(xù)維持在停止?fàn)顟B(tài)。具體地,處于正常運(yùn)行狀態(tài)的進(jìn)程接收到sighup指令后將自動(dòng)退出,而處于停止?fàn)顟B(tài)的進(jìn)程接收到sigcont指令后將繼續(xù)執(zhí)行,并會(huì)繼續(xù)執(zhí)行后馬上執(zhí)行之前已經(jīng)發(fā)送的sighup指令。這是因?yàn)檫M(jìn)程在處于停止?fàn)顟B(tài)的時(shí)候是不能響應(yīng)信號(hào)的,只有當(dāng)進(jìn)程繼續(xù)運(yùn)行的時(shí)候才能響應(yīng)之前的信號(hào)。
[0045]這樣,可以確保孤兒進(jìn)程組內(nèi)的所有進(jìn)程均能夠繼續(xù)執(zhí)行或者退出,避免有進(jìn)程處于停止?fàn)顟B(tài),且孤兒進(jìn)程組以外的進(jìn)程又不能監(jiān)控這些處于停止?fàn)顟B(tài)的進(jìn)程。
[0046]由于處于停止?fàn)顟B(tài)的進(jìn)程接收到掛斷指令以及繼續(xù)執(zhí)行指令后,如果進(jìn)程沒(méi)有建立sighup指令的處理函數(shù),那么運(yùn)行的進(jìn)程就會(huì)因?yàn)槭盏絪ighup指令而退出,因此,進(jìn)程在接收到掛斷指令以及繼續(xù)執(zhí)行指令后,要么退出,要么繼續(xù)進(jìn)行,所占用的系統(tǒng)資源將獲得釋放,避免移動(dòng)終端運(yùn)行緩慢的情況發(fā)生。
[0047]當(dāng)然,連續(xù)發(fā)送的掛斷指令以及繼續(xù)執(zhí)行指令是本發(fā)明優(yōu)選的方式,指令發(fā)送模塊22也可以是只發(fā)送繼續(xù)執(zhí)行指令,讓原本處于停止?fàn)顟B(tài)的進(jìn)程繼續(xù)恢復(fù)執(zhí)行,也可以避免孤兒進(jìn)程組內(nèi)有長(zhǎng)期處于停止?fàn)顟B(tài)的進(jìn)程長(zhǎng)期占用系統(tǒng)資源。
[0048]如圖5所示的,如果saf e-debug進(jìn)程退出時(shí),一旦孵化進(jìn)程11所在的進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,孤J L進(jìn)程saf e-debug進(jìn)程將向進(jìn)程組中所有進(jìn)程發(fā)送掛斷指令以及繼續(xù)執(zhí)行指令。并且,safe-debug進(jìn)程的父進(jìn)程已經(jīng)變成初始化進(jìn)程10,因此saf e-debug進(jìn)程與systenuserver進(jìn)程均在以孵化進(jìn)程11為組長(zhǎng)的進(jìn)程組中。然而,正常運(yùn)行的進(jìn)程,如孵化進(jìn)程11、system_server等進(jìn)程也接收到掛斷指令以及繼續(xù)執(zhí)行指令。但是,孵化進(jìn)程11、system_server進(jìn)程等因?yàn)闆](méi)有建立sighup指令的處理函數(shù),因此孵化進(jìn)程11、system_server進(jìn)程將在接收到sighup指令后退出。
[0049]但是,由于systenuserver進(jìn)程是支撐系統(tǒng)運(yùn)行的核心進(jìn)程,但其也是在孤兒進(jìn)程組內(nèi),因此,一旦system_server進(jìn)程退出,將導(dǎo)致JAVA世界的終結(jié),從而導(dǎo)致操作系統(tǒng)重新啟動(dòng),也就是移動(dòng)終端出現(xiàn)異常重新啟動(dòng)的原因。
[0050]為了避免出現(xiàn)異動(dòng)終端異常重新啟動(dòng),本發(fā)明在終止運(yùn)行條件判斷模塊21中增加判斷條件,也就是判斷孤兒進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程11。進(jìn)程組的組長(zhǎng)通常是該進(jìn)程組的某個(gè)進(jìn)程的父進(jìn)程,通常,進(jìn)程組的組長(zhǎng)是進(jìn)程組最先形成的進(jìn)程,且進(jìn)程組內(nèi)的其他進(jìn)程可以由進(jìn)程組組長(zhǎng)孵化形成。
[0051]如圖5所示的,由于safe-debug進(jìn)程是在以孵化進(jìn)程11為組長(zhǎng)的進(jìn)程組中,因此,終止運(yùn)行條件判斷模塊21在判斷孤兒進(jìn)程組中有處于停止?fàn)顟B(tài)的進(jìn)程前,需要判斷該孤兒進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程11,如果孤兒進(jìn)程組的組長(zhǎng)是孵化進(jìn)程11,則不會(huì)發(fā)送掛斷指令以及繼續(xù)執(zhí)行指令。也就是在Linux系統(tǒng)的exit.c源文件中繞過(guò)孵化進(jìn)程11所在的進(jìn)程組,如在函數(shù)kill_orphaned_pgrp()中檢測(cè)到待關(guān)閉的進(jìn)程組的組長(zhǎng)是孵化進(jìn)程11就跳過(guò)此孤兒進(jìn)程組。這樣,就可以避免諸如systenuserver進(jìn)程退出而導(dǎo)致操作系統(tǒng)重新啟動(dòng)的情況發(fā)生。
[0052]檢測(cè)進(jìn)程組的組長(zhǎng)是否孵化進(jìn)程,可以通過(guò)對(duì)進(jìn)程組的名稱、屬性等進(jìn)行判斷,由于每一個(gè)進(jìn)程組具有一個(gè)main函數(shù),main函數(shù)中包含有該進(jìn)程組的屬性信息,因此可以通過(guò)查詢進(jìn)程組的main函數(shù)信息來(lái)判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程11。
[0053]可見,終止運(yùn)行條件判斷模塊21只有在判斷孤兒進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程11,并且進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,指令發(fā)送模塊22才會(huì)發(fā)送掛斷指令以及繼續(xù)執(zhí)行指令。
[0054]下面結(jié)合圖6介紹移動(dòng)終端控制方法的工作流程。首先,在當(dāng)前進(jìn)程退出時(shí),執(zhí)行進(jìn)程的退出程序,即執(zhí)行步驟SI,如執(zhí)行d0_exit函數(shù)的操作。然后,執(zhí)行步驟S2,判斷當(dāng)前正在執(zhí)行退出操作的進(jìn)程是否為孤兒進(jìn)程,如果是孤兒進(jìn)程,則執(zhí)行步驟S3,判斷孤兒進(jìn)程所在的進(jìn)程組是否為孤兒進(jìn)程組。在判斷進(jìn)程組是否為孤兒進(jìn)程組時(shí),可以逐一查詢進(jìn)程組中每一進(jìn)程的父進(jìn)程,如果發(fā)現(xiàn)進(jìn)程組的成員的父進(jìn)程為同一進(jìn)程組的成員,或者進(jìn)程組的成員的父進(jìn)程就是初始化進(jìn)程,均認(rèn)為該進(jìn)程組已經(jīng)成為孤兒進(jìn)程組。
[0055]或者,可以循環(huán)查詢進(jìn)程組中每一個(gè)線程,如果進(jìn)程組中的有進(jìn)程正處于退出狀態(tài)而且其所在的進(jìn)程組是空的了,或者進(jìn)程組有進(jìn)程的父進(jìn)程是初始化進(jìn)程,說(shuō)明在該線程組中已經(jīng)沒(méi)有其他線程了,如果某一進(jìn)程的父進(jìn)程和該進(jìn)程不在同一個(gè)組中,并且該進(jìn)程的父進(jìn)程和該進(jìn)程組屬于一個(gè)會(huì)話,則表示該進(jìn)程組不是孤兒進(jìn)程組。
[0056]如果判斷進(jìn)程所在的進(jìn)程組為孤兒進(jìn)程組,則判斷進(jìn)程組是否滿足終止運(yùn)行的條件,也就是執(zhí)行步驟S4,判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程,如果是,則直接不再執(zhí)行后續(xù)的判斷,如果孤兒進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程,則執(zhí)行步驟S5,進(jìn)一步判斷進(jìn)程組內(nèi)是否有處于停止?fàn)顟B(tài)的進(jìn)程,如果有,則執(zhí)行步驟S6,孤兒進(jìn)程向孤兒進(jìn)程組內(nèi)的所有進(jìn)程連續(xù)發(fā)送兩條指令,分別是掛斷指令以及繼續(xù)執(zhí)行指令,這樣,孤兒進(jìn)程組內(nèi)的進(jìn)程將執(zhí)行步驟S7,對(duì)于沒(méi)有建立sighup指令的處理函數(shù)的進(jìn)程,將在收到掛斷指令后退出,而處于停止?fàn)顟B(tài)的進(jìn)程,則執(zhí)行步驟S8,在接收到繼續(xù)執(zhí)行指令后繼續(xù)執(zhí)行,并且馬上執(zhí)行剛才接收到的掛斷指令,這樣,確保進(jìn)程組中的所有進(jìn)程要么退出運(yùn)行,要么繼續(xù)執(zhí)行,避免占用系統(tǒng)資源。最后,在進(jìn)程組的所有進(jìn)程均退出后,進(jìn)程組將被關(guān)閉。
[0057]應(yīng)用本發(fā)明的方案,可以將孤兒進(jìn)程組中處于停止?fàn)顟B(tài)的進(jìn)程退出或者繼續(xù)執(zhí)行,從而有效釋放其占用的系統(tǒng)資源,避免移動(dòng)終端運(yùn)行緩慢的情況發(fā)生。并且,在發(fā)送掛斷指令以及繼續(xù)執(zhí)行指令前,還判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程,如果是孵化進(jìn)程則不會(huì)發(fā)送掛斷指令以及繼續(xù)執(zhí)行指令,從而避免因system_server進(jìn)程的退出而導(dǎo)致android系統(tǒng)重新啟動(dòng)。
[0058]當(dāng)然,上述實(shí)施例中在判斷滿足進(jìn)程終止運(yùn)行的條件后,發(fā)送的終止運(yùn)行指令是掛斷指令以及繼續(xù)執(zhí)行指令,在其他上述方式中,終止云的指令也可以是繼續(xù)執(zhí)行指令,這樣也能夠確保處于停止?fàn)顟B(tài)的進(jìn)程恢復(fù)執(zhí)行,避免處于停止?fàn)顟B(tài)的進(jìn)程長(zhǎng)期占用系統(tǒng)資源。
[0059]當(dāng)然,上述的方案只是本發(fā)明優(yōu)選的實(shí)施方案,實(shí)際應(yīng)用是還可以有更多的變化,例如,判斷進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程還可以通過(guò)對(duì)進(jìn)程組的成員的父進(jìn)程進(jìn)行判斷,或者根據(jù)進(jìn)程組的ID進(jìn)行判斷等,這樣的改變并不影響本發(fā)明的實(shí)施,也應(yīng)該包括在本發(fā)明的保護(hù)范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種移動(dòng)終端的控制方法,其特征在于,包括: 在第一進(jìn)程退出且所述第一進(jìn)程成為孤兒進(jìn)程時(shí),判斷所述第一進(jìn)程所在的進(jìn)程組是否為孤兒進(jìn)程組,如是,判斷所述進(jìn)程組是否滿足終止運(yùn)行的條件,如是,向所述進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令; 所述進(jìn)程組滿足終止運(yùn)行的條件包括:所述進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,并且所述進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程。2.根據(jù)權(quán)利要求1所述的移動(dòng)終端的控制方法,其特征在于: 所述向所述進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令包括:所述第一進(jìn)程向所述進(jìn)程組中的進(jìn)程連續(xù)發(fā)送掛斷指令以及繼續(xù)執(zhí)行指令。3.根據(jù)權(quán)利要求1所述的移動(dòng)終端的控制方法,其特征在于: 所述向所述進(jìn)程組中的進(jìn)程發(fā)送運(yùn)行的終止指令包括:所述第一進(jìn)程向所述進(jìn)程組中的進(jìn)程發(fā)送繼續(xù)執(zhí)行指令。4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的移動(dòng)終端的控制方法,其特征在于: 所述進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程通過(guò)以下方式確定:根據(jù)所述進(jìn)程組的名稱和/或所述進(jìn)程組的屬性判斷所述進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程。5.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的移動(dòng)終端的控制方法,其特征在于: 所述判斷所述進(jìn)程組是否滿足終止運(yùn)行的條件的步驟包括:判斷所述進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程,如否,則進(jìn)一步判斷所述進(jìn)程組內(nèi)是否有處于停止?fàn)顟B(tài)的進(jìn)程,如是,則判斷所述進(jìn)程組滿足終止運(yùn)行的條件。6.一種移動(dòng)終端的控制裝置,其特征在于,包括: 孤兒進(jìn)程組判斷模塊,在第一進(jìn)程退出且所述第一進(jìn)程成為孤兒進(jìn)程時(shí),判斷所述第一進(jìn)程所在的進(jìn)程組是否為孤兒進(jìn)程組; 終止運(yùn)行條件判斷模塊,在判斷所述第一進(jìn)程所在的進(jìn)程組為孤兒進(jìn)程組后,判斷所述進(jìn)程組是否滿足終止運(yùn)行的條件;所述進(jìn)程組滿足終止運(yùn)行的條件包括:所述進(jìn)程組內(nèi)有處于停止?fàn)顟B(tài)的進(jìn)程,并且所述進(jìn)程組的組長(zhǎng)不是孵化進(jìn)程; 指令發(fā)送模塊,在判斷所述進(jìn)程組滿足所述終止運(yùn)行條件時(shí),向所述進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令。7.根據(jù)權(quán)利要求6所述的移動(dòng)終端控制裝置,其特征在于: 所述指令發(fā)送模塊向所述進(jìn)程組中的進(jìn)程發(fā)送終止運(yùn)行的指令包括所述第一進(jìn)程向所述進(jìn)程組中的進(jìn)程連續(xù)發(fā)送掛斷指令以及繼續(xù)執(zhí)行指令。8.根據(jù)權(quán)利要求6所述的移動(dòng)終端控制裝置,其特征在于: 所述指令發(fā)送模塊向所述進(jìn)程組中的進(jìn)程發(fā)送運(yùn)行的終止指令包括所述第一進(jìn)程向所述進(jìn)程組中的進(jìn)程發(fā)送繼續(xù)執(zhí)行指令。9.根據(jù)權(quán)利要求6至8任一項(xiàng)所述的移動(dòng)終端控制裝置,其特征在于: 所述終止運(yùn)行條件判斷模塊根據(jù)所述進(jìn)程組的名稱和/或所述進(jìn)程組的屬性判斷所述進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程。10.根據(jù)權(quán)利要求6至8任一項(xiàng)所述的移動(dòng)終端控制裝置,其特征在于,還包括: 所述終止運(yùn)行條件判斷模塊先判斷所述進(jìn)程組的組長(zhǎng)是否為孵化進(jìn)程,如不是,則再判斷所述進(jìn)程組內(nèi)是否有處于停止?fàn)顟B(tài)的進(jìn)程。
【文檔編號(hào)】G06F9/50GK105930215SQ201610214700
【公開日】2016年9月7日
【申請(qǐng)日】2016年4月7日
【發(fā)明人】白浩文, 吳章金, 彭偉林
【申請(qǐng)人】珠海市魅族科技有限公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1