一種應(yīng)用監(jiān)控方法及裝置制造方法
【專利摘要】本發(fā)明實(shí)施例公開(kāi)了一種應(yīng)用監(jiān)控方法及裝置,本發(fā)明實(shí)施例方法包括:當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn)程,所述第一進(jìn)程為空白進(jìn)程;運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所述第二進(jìn)程為所述第一進(jìn)程的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程;當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程,由所述系統(tǒng)的原始進(jìn)程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān)控。
【專利說(shuō)明】一種應(yīng)用監(jiān)控方法及裝置
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及移動(dòng)終端領(lǐng)域,尤其涉及一種應(yīng)用監(jiān)控方法及裝置。
【背景技術(shù)】
[0002] 在Linux 2. 6. 13版本中引入了 inotify機(jī)制,可以對(duì)系統(tǒng)的文件和目錄的變化進(jìn) 行監(jiān)控。inotify是一個(gè)Linux內(nèi)核特性,它監(jiān)控文件系統(tǒng),并且及時(shí)向?qū)iT(mén)的應(yīng)用程序發(fā) 出相關(guān)的事件警告,比如刪除、讀、寫(xiě)和卸載操作等,還可以跟蹤這些操作的源頭和目標(biāo)等 細(xì)節(jié)。
[0003] 在Android系統(tǒng)中,在用戶對(duì)應(yīng)用進(jìn)行卸載時(shí),系統(tǒng)會(huì)刪除應(yīng)用的安裝數(shù)據(jù),通過(guò) inotify機(jī)制,當(dāng)系統(tǒng)監(jiān)控到應(yīng)用被卸載時(shí),就可以設(shè)置喚起卸載調(diào)查頁(yè)面的功能;在現(xiàn)有 技術(shù)中,采用JAVA本地調(diào)用(JNI,JavaNative Interface)以分叉(fork)函數(shù)的形式對(duì)目 標(biāo)應(yīng)用創(chuàng)建監(jiān)控進(jìn)程,在監(jiān)控進(jìn)程中利用inotify機(jī)制對(duì)目標(biāo)應(yīng)用的相關(guān)文件進(jìn)行監(jiān)控, 當(dāng)監(jiān)控到目標(biāo)應(yīng)用的相關(guān)文件被刪除時(shí),則認(rèn)為目標(biāo)應(yīng)用被卸載,即可以觸發(fā)喚起卸載調(diào) 查頁(yè)面的操作。
[0004] 在現(xiàn)有技術(shù)中,直接在目標(biāo)應(yīng)用進(jìn)程中通過(guò)fork函數(shù)創(chuàng)建監(jiān)控進(jìn)程,導(dǎo)致目標(biāo)應(yīng) 用進(jìn)程中的一些句柄在監(jiān)控進(jìn)程(目標(biāo)應(yīng)用進(jìn)程的子進(jìn)程)中無(wú)法釋放,以Binder通信機(jī) 制為例,若目標(biāo)應(yīng)用進(jìn)程因卸載而終止,則Binder句柄在監(jiān)控進(jìn)程中無(wú)法釋放,進(jìn)而導(dǎo)致 系統(tǒng)內(nèi)Binder的通信機(jī)制出現(xiàn)問(wèn)題。并且,在這種情況下,若目標(biāo)應(yīng)用進(jìn)程因卸載而終止, 還可能導(dǎo)致系統(tǒng)內(nèi)存在僵尸進(jìn)程的問(wèn)題。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實(shí)施例提供了一種應(yīng)用監(jiān)控方法及裝置,用于避免因目標(biāo)應(yīng)用被卸載而導(dǎo) 致系統(tǒng)目標(biāo)應(yīng)用內(nèi)的監(jiān)控進(jìn)程出現(xiàn)問(wèn)題。
[0006] 本發(fā)明實(shí)施例提供的應(yīng)用監(jiān)控方法,包括:
[0007] 當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn)程,所述第一進(jìn) 程為空白進(jìn)程;
[0008] 運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所述第二進(jìn)程為所述第一 進(jìn)程的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程;
[0009] 當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程,由所述系統(tǒng)的原始進(jìn)程領(lǐng)養(yǎng)所 述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān)控。
[0010] 本發(fā)明實(shí)施例提供的應(yīng)用監(jiān)控裝置,包括:
[0011] 第一創(chuàng)建單元,用于當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),運(yùn)行第一分叉函數(shù),創(chuàng)建第 一進(jìn)程,所述第一進(jìn)程為空白進(jìn)程;
[0012] 第二創(chuàng)建單元,用于運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所述第 二進(jìn)程為所述第一進(jìn)程的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程;
[0013] 維護(hù)單元,用于當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程,由所述系統(tǒng)的原 始進(jìn)程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān)控。
[0014] 從以上技術(shù)方案可以看出,本發(fā)明實(shí)施例具有以下優(yōu)點(diǎn):
[0015] 在本發(fā)明實(shí)施例中,當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),通過(guò)分叉函數(shù)創(chuàng)建兩次進(jìn) 行,第一次為空白進(jìn)程,第二次以該空白進(jìn)程作為父進(jìn)程創(chuàng)建目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程,并 且,在監(jiān)控進(jìn)程創(chuàng)建完成后,空白進(jìn)程自動(dòng)刪除,由系統(tǒng)的原始進(jìn)程作為父進(jìn)程對(duì)該監(jiān)控進(jìn) 程進(jìn)行領(lǐng)養(yǎng);從而,由于監(jiān)控進(jìn)程不是目標(biāo)應(yīng)用進(jìn)程的子進(jìn)程,因此,當(dāng)目標(biāo)應(yīng)用被卸載時(shí), 不會(huì)對(duì)監(jiān)控進(jìn)程造成影響,也不會(huì)導(dǎo)致一些句柄無(wú)法釋放以及僵尸進(jìn)程的問(wèn)題。
【專利附圖】
【附圖說(shuō)明】
[0016] 為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所 需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施 例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲 得其他的附圖。
[0017] 圖1是本發(fā)明實(shí)施例中應(yīng)用監(jiān)控方法的一個(gè)流程示意圖;
[0018] 圖2是本發(fā)明實(shí)施例中應(yīng)用監(jiān)控方法的另一個(gè)流程示意圖;
[0019] 圖3是本發(fā)明實(shí)施例中應(yīng)用監(jiān)控裝置的一個(gè)結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0020] 下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完 整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;?本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他 實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0021] 請(qǐng)參閱圖1,本發(fā)明實(shí)施例中應(yīng)用監(jiān)控方法的一個(gè)實(shí)施例包括:
[0022] 101、運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn)程;
[0023] 當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),應(yīng)用監(jiān)控裝置運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn) 程,所述第一進(jìn)程為空白進(jìn)程。
[0024] 具體的,目標(biāo)應(yīng)用進(jìn)程的創(chuàng)建可以有多種觸發(fā)方式,如,移動(dòng)終端在開(kāi)機(jī)時(shí),目標(biāo) 應(yīng)用進(jìn)程可以自動(dòng)創(chuàng)建;再如,當(dāng)移動(dòng)終端發(fā)生網(wǎng)絡(luò)變更時(shí),目標(biāo)進(jìn)程也可以在系統(tǒng)中重新 創(chuàng)建。
[0025] 具體的,本發(fā)明實(shí)施例中所述的系統(tǒng)可以為移動(dòng)終端的操作系統(tǒng)。
[0026] 在本發(fā)明實(shí)施例中,應(yīng)用監(jiān)控裝置為具有本發(fā)明實(shí)施例中應(yīng)用監(jiān)控方法的全部功 能的裝置,可以為獨(dú)單的物理設(shè)備,也可以為加載在計(jì)算機(jī)上的軟件程序,或一個(gè)軟件中的 功能模塊,或單獨(dú)軟件的形式或以插件的形式存在。應(yīng)用監(jiān)控裝置的描述僅僅是示意性的, 其中單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè) 單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一 點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或 單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。所述集成的單元如果以軟件 功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ) 介質(zhì)中。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或 者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一 個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者 網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。
[0027] 102、運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;
[0028] 應(yīng)用監(jiān)控裝置運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所述第二進(jìn) 程為所述第一進(jìn)程的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程。
[0029] 具體的,在創(chuàng)建了所述第一進(jìn)程之后,應(yīng)用監(jiān)控裝置以所述第一進(jìn)程為父進(jìn)程,創(chuàng) 建作為目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程的第二進(jìn)程。
[0030] 在本發(fā)明實(shí)施例中,第一分叉函數(shù)為創(chuàng)建第一進(jìn)程的fork函數(shù),第二分叉函數(shù)為 創(chuàng)建第二進(jìn)程的fork函數(shù);在實(shí)際應(yīng)用中,分叉函數(shù)的實(shí)際內(nèi)容可以是一致的,也可以是 不同的,此處分叉函數(shù)之前的"第一"、"第二"的描述僅是便于分別對(duì)應(yīng)第一進(jìn)程和第二進(jìn) 程,并無(wú)實(shí)質(zhì)含義,不應(yīng)理解為對(duì)分叉函數(shù)具體內(nèi)容的限定。
[0031] 103、原始進(jìn)程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān) 控。
[0032] 當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程(即空白進(jìn)程自動(dòng)刪除),由所述 系統(tǒng)的原始(init)進(jìn)程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行 監(jiān)控。
[0033] 在實(shí)際應(yīng)用中,當(dāng)一個(gè)子進(jìn)程結(jié)束運(yùn)行時(shí),子進(jìn)程的退出狀態(tài)(返回值)會(huì)反饋給 系統(tǒng),系統(tǒng)則以SIGCHLD信號(hào)將子進(jìn)程被結(jié)束的事件告知父進(jìn)程,此時(shí)子進(jìn)程的進(jìn)程控制 塊仍駐留在內(nèi)存中。當(dāng)父進(jìn)程收到SIGCHLD后,會(huì)通過(guò)系統(tǒng)調(diào)用獲得子進(jìn)程的退出狀態(tài), 然后內(nèi)核就可以從內(nèi)存中釋放已結(jié)束的子進(jìn)程的進(jìn)程控制塊;而如若父進(jìn)程沒(méi)有這么做的 話,子進(jìn)程的進(jìn)程控制塊就會(huì)一直駐留在內(nèi)存中,也即成為僵尸進(jìn)程。在現(xiàn)有技術(shù)中,由于 監(jiān)控進(jìn)程作為目標(biāo)應(yīng)用進(jìn)程的子進(jìn)程,因此當(dāng)目標(biāo)應(yīng)用被卸載時(shí),目標(biāo)應(yīng)用進(jìn)程也隨之停 止運(yùn)行,很可能沒(méi)來(lái)得及在內(nèi)存中釋放已結(jié)束的子進(jìn)程的進(jìn)程控制塊,從而導(dǎo)致僵尸進(jìn)程 的問(wèn)題。
[0034] 在本發(fā)明實(shí)施例中,當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),通過(guò)分叉函數(shù)創(chuàng)建兩次進(jìn) 行,第一次為空白進(jìn)程,第二次以該空白進(jìn)程作為父進(jìn)程創(chuàng)建目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程,并 且,在監(jiān)控進(jìn)程創(chuàng)建完成后,空白進(jìn)程自動(dòng)刪除,由系統(tǒng)的原始進(jìn)程作為父進(jìn)程對(duì)該監(jiān)控進(jìn) 程進(jìn)行領(lǐng)養(yǎng);從而,由于監(jiān)控進(jìn)程不是目標(biāo)應(yīng)用進(jìn)程的子進(jìn)程,因此,當(dāng)目標(biāo)應(yīng)用被卸載時(shí), 不會(huì)對(duì)監(jiān)控進(jìn)程造成影響,也不會(huì)導(dǎo)致一些句柄無(wú)法釋放以及僵尸進(jìn)程的問(wèn)題。
[0035] 在實(shí)際應(yīng)用中,監(jiān)控進(jìn)程在對(duì)目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān)控時(shí),可能難以分清"清空數(shù) 據(jù)"、"覆蓋安裝"以及"應(yīng)用卸載"等用戶操作,可能導(dǎo)致卸載調(diào)查頁(yè)面的誤觸發(fā),本發(fā)明實(shí) 施例有相應(yīng)的解決方法,請(qǐng)參閱圖2,本發(fā)明實(shí)施例中應(yīng)用監(jiān)控方法的另一個(gè)實(shí)施例包括:
[0036] 201、、運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn)程;
[0037] 當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),應(yīng)用監(jiān)控裝置運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn) 程,所述第一進(jìn)程為空白進(jìn)程。
[0038] 示例性的,所述創(chuàng)建第一進(jìn)程的具體過(guò)程可以:在應(yīng)用配置文件(如,安卓系 統(tǒng)中的AndroidManifest. xml)中設(shè)定所述第一進(jìn)程的進(jìn)程標(biāo)識(shí),通過(guò)所述系統(tǒng)中合子 (zygote)進(jìn)程的分叉函數(shù)機(jī)制,生成以所述進(jìn)程標(biāo)識(shí)命名的空白進(jìn)程。
[0039] 202、運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;
[0040] 應(yīng)用監(jiān)控裝置運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所述第二進(jìn) 程為所述第一進(jìn)程的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程。
[0041] 203、原始進(jìn)程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān) 控。
[0042] 當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程(即空白進(jìn)程自動(dòng)刪除),應(yīng)用監(jiān) 控裝置通過(guò)系統(tǒng)的原始進(jìn)程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn) 行監(jiān)控。
[0043] 204、在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中生成卸載監(jiān)控文件,并使用所述第二 進(jìn)程對(duì)所述卸載監(jiān)控文件進(jìn)行監(jiān)控;
[0044] 應(yīng)用監(jiān)控裝置在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中生成卸載監(jiān)控文件(如,安 卓系統(tǒng)中的uninstall, watch),并使用所述第二進(jìn)程對(duì)所述卸載監(jiān)控文件進(jìn)行監(jiān)控。
[0045] 當(dāng)所述卸載監(jiān)控文件被刪除時(shí),判斷所述目標(biāo)應(yīng)用進(jìn)程的安裝文件(如,安卓系 統(tǒng)中的以APK為后綴的文件)是否被刪除,若是,則確定當(dāng)前的用戶行為是應(yīng)用卸載,可以 執(zhí)行步驟205 ;若否,則確定當(dāng)前的用戶行為是數(shù)據(jù)清空,可以執(zhí)行步驟206。
[0046] 在本發(fā)明實(shí)施例中,當(dāng)發(fā)生覆蓋安裝時(shí),由于系統(tǒng)并不會(huì)清除目標(biāo)應(yīng)用的數(shù)據(jù),因 此,當(dāng)應(yīng)用監(jiān)控裝置檢測(cè)到目標(biāo)應(yīng)用的進(jìn)行卸載操作(覆蓋安裝時(shí),需要先卸載再重裝) 時(shí),同時(shí)還檢測(cè)到卸載監(jiān)控文件還在,則可以確定是覆蓋安裝事件,與"清空數(shù)據(jù)"和"應(yīng)用 卸載"區(qū)分開(kāi)來(lái)。
[0047] 205、在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中再次生成所述卸載監(jiān)控文件;
[0048] 應(yīng)用監(jiān)控裝置在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄(如,安卓系統(tǒng)中的data目 錄)中再次生成所述卸載監(jiān)控文件。
[0049] 在實(shí)際應(yīng)用中,為了精簡(jiǎn)移動(dòng)終端的存儲(chǔ)空間,用戶可以會(huì)使用一些清理應(yīng)用對(duì) 系統(tǒng)進(jìn)行"清空數(shù)據(jù)"的操作;此時(shí),卸載監(jiān)控文件可能會(huì)被刪除,因此,需要在所述目標(biāo)應(yīng) 用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中再次生成所述卸載監(jiān)控文件,以便于監(jiān)控進(jìn)程繼續(xù)對(duì)目標(biāo)應(yīng)用進(jìn) 程進(jìn)行監(jiān)控。
[0050] 206、指示所述系統(tǒng)中的瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面。
[0051] 應(yīng)用監(jiān)控裝置指示所述系統(tǒng)中的瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面。
[0052] 當(dāng)應(yīng)用監(jiān)控裝置檢測(cè)到所述卸載監(jiān)控文件被刪除時(shí),且所述目標(biāo)應(yīng)用進(jìn)程的安裝 文件也被刪除,則表示當(dāng)前系統(tǒng)正在進(jìn)行應(yīng)用卸載操作,可以喚起所述目標(biāo)應(yīng)用進(jìn)程的卸 載調(diào)查頁(yè)面。
[0053] 進(jìn)一步的,為了防止惡意軟件禁止喚起卸載調(diào)查頁(yè)面,應(yīng)用監(jiān)控裝置可以判斷所 述系統(tǒng)的原生瀏覽器是否存在,若是,則觸發(fā)所述系統(tǒng)的原生瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn) 程的卸載調(diào)查頁(yè)面;若否,則觸發(fā)所述系統(tǒng)的默認(rèn)瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào) 查頁(yè)面。由于原生瀏覽器一般不易被惡意軟件控制,因此,在原生瀏覽器中喚起卸載調(diào)查頁(yè) 面的成功概率較高;在沒(méi)有原生瀏覽器時(shí),再使用系統(tǒng)的默認(rèn)瀏覽器進(jìn)行訪問(wèn)。
[0054] 在實(shí)際應(yīng)用中,除了利用Linux中的inotify機(jī)制進(jìn)行卸載監(jiān)控外,還可以在應(yīng)用 中通過(guò)后臺(tái)Service中監(jiān)控系統(tǒng)的日志文件實(shí)現(xiàn)。在卸載應(yīng)用時(shí),Android會(huì)輸出一些標(biāo) 志性的日志文件,一旦監(jiān)控到這些日志文件中有目標(biāo)應(yīng)用的名稱出現(xiàn)時(shí),則認(rèn)為發(fā)生卸載 事件。
[0055] 在實(shí)際應(yīng)用中,為了避免出現(xiàn)進(jìn)程重復(fù)的問(wèn)題,本發(fā)明實(shí)施例也提供了相應(yīng)的方 法,如:將所述第二進(jìn)程的進(jìn)程標(biāo)識(shí)發(fā)送到j(luò)ava層進(jìn)行存儲(chǔ);每當(dāng)檢測(cè)到所述目標(biāo)應(yīng)用進(jìn) 程在所述系統(tǒng)中創(chuàng)建時(shí),判斷所述第二進(jìn)程是否在運(yùn)行,若否,則創(chuàng)建所述第二進(jìn)程;每當(dāng) 對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行版本更新時(shí),判斷所述第二進(jìn)程是否在運(yùn)行,若是,則刪除所述第 二進(jìn)程,并重新創(chuàng)建所述第二進(jìn)程。在本發(fā)明實(shí)施例中,重新創(chuàng)建所述第二進(jìn)程即指的是重 新觸發(fā)創(chuàng)建監(jiān)控進(jìn)程的流程。
[0056] 此外,還可以在監(jiān)控進(jìn)程中創(chuàng)建一個(gè)socket (插座)字段,在需要更新數(shù)據(jù)時(shí),父 進(jìn)程與監(jiān)控進(jìn)程通過(guò)socket進(jìn)行通信,不需要先殺死監(jiān)控進(jìn)程再重新創(chuàng)建,從而監(jiān)控進(jìn)程 的唯一性可以通過(guò)文件鎖的機(jī)制來(lái)保證。
[0057] 上面僅以一些例子對(duì)本發(fā)明實(shí)施例中的應(yīng)用場(chǎng)景進(jìn)行了說(shuō)明,可以理解的是,在 實(shí)際應(yīng)用中,還可以有更多的應(yīng)用場(chǎng)景,具體此處不作限定。
[0058] 下面對(duì)實(shí)現(xiàn)本發(fā)明實(shí)施例中應(yīng)用監(jiān)控方法的應(yīng)用監(jiān)控裝置進(jìn)行描述,請(qǐng)參閱圖3, 本發(fā)明實(shí)施例中應(yīng)用監(jiān)控裝置的一個(gè)實(shí)施例包括:
[0059] 第一創(chuàng)建單元301,用于當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),運(yùn)行第一分叉函數(shù),創(chuàng) 建第一進(jìn)程,所述第一進(jìn)程為空白進(jìn)程;
[0060] 第二創(chuàng)建單元302,用于運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所 述第二進(jìn)程為所述第一進(jìn)程的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程;
[0061] 維護(hù)單元303,用于當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程,由所述系統(tǒng) 的原始進(jìn)程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān)控。
[0062] 具體的,所述第一創(chuàng)建單元301用于:
[0063] 在應(yīng)用配置文件中設(shè)定所述第一進(jìn)程的進(jìn)程標(biāo)識(shí),通過(guò)所述系統(tǒng)中合子zygote 進(jìn)程的分叉函數(shù)機(jī)制,生成以所述進(jìn)程標(biāo)識(shí)命名的空白進(jìn)程。
[0064] 進(jìn)一步的,所述裝置還包括:
[0065] 卸載監(jiān)控單元304,用于在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中生成卸載監(jiān)控文 件,并使用所述第二進(jìn)程對(duì)所述卸載監(jiān)控文件進(jìn)行監(jiān)控;當(dāng)所述卸載監(jiān)控文件被刪除時(shí),判 斷所述目標(biāo)應(yīng)用進(jìn)程的安裝文件是否被刪除,若是,則確定當(dāng)前的用戶行為是應(yīng)用卸載;若 否,則確定當(dāng)前的用戶行為是數(shù)據(jù)清空。
[0066] 具體的,所述卸載監(jiān)控單元304還用于:
[0067] 所述確定當(dāng)前的用戶行為是數(shù)據(jù)清空之后,在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄 中再次生成所述卸載監(jiān)控文件。
[0068] 所述確定當(dāng)前的用戶行為是應(yīng)用卸載之后,指示所述系統(tǒng)中的瀏覽器訪問(wèn)所述目 標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面。
[0069] 所述指示所述系統(tǒng)中的瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面之前,判斷 所述系統(tǒng)的原生瀏覽器是否存在,若是,則觸發(fā)所述系統(tǒng)的原生瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用 進(jìn)程的卸載調(diào)查頁(yè)面;若否,則觸發(fā)所述系統(tǒng)的默認(rèn)瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載 調(diào)查頁(yè)面。
[0070] 進(jìn)一步的,所述裝置還包括:
[0071] 進(jìn)程維護(hù)單元305,用于將所述第二進(jìn)程的進(jìn)程標(biāo)識(shí)發(fā)送到j(luò)ava層進(jìn)行存儲(chǔ);每 當(dāng)檢測(cè)到所述目標(biāo)應(yīng)用進(jìn)程在所述系統(tǒng)中創(chuàng)建時(shí),判斷所述第二進(jìn)程是否在運(yùn)行,若否,則 創(chuàng)建所述第二進(jìn)程;每當(dāng)對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行版本更新時(shí),判斷所述第二進(jìn)程是否在 運(yùn)行,若是,則刪除所述第二進(jìn)程,并重新創(chuàng)建所述第二進(jìn)程。
[0072] 上述各個(gè)單元/模塊的具體操作過(guò)程請(qǐng)參閱方法實(shí)施例,此處不再贅述。
[0073] 在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的裝置和方法可以通過(guò)其 它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅 僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié) 合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的 相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,裝置或單元的間接耦合或通 信連接,可以是電性,機(jī)械或其它的形式。
[0074] 所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯 示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè) 網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目 的。
[0075] 另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以 是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單 元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
[0076] 所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用 時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì) 上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形 式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算 機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個(gè)實(shí)施例所述方法 的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程 序代碼的介質(zhì)。
[0077] 以上所述,僅為本發(fā)明的【具體實(shí)施方式】,但本發(fā)明的保護(hù)范圍并不局限于此,任何 熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵 蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)所述以權(quán)利要求的保護(hù)范圍為準(zhǔn)。
【權(quán)利要求】
1. 一種應(yīng)用監(jiān)控方法,其特征在于,包括: 當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn)程,所述第一進(jìn)程為 空白進(jìn)程; 運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所述第二進(jìn)程為所述第一進(jìn)程 的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程; 當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程,由所述系統(tǒng)的原始進(jìn)程領(lǐng)養(yǎng)所述第 二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān)控。
2. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn)程, 包括: 在應(yīng)用配置文件中設(shè)定所述第一進(jìn)程的進(jìn)程標(biāo)識(shí),通過(guò)所述系統(tǒng)中合子zygote進(jìn)程 的分叉函數(shù)機(jī)制,生成以所述進(jìn)程標(biāo)識(shí)命名的空白進(jìn)程。
3. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法還包括: 在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中生成卸載監(jiān)控文件,并使用所述第二進(jìn)程對(duì)所 述卸載監(jiān)控文件進(jìn)行監(jiān)控; 當(dāng)所述卸載監(jiān)控文件被刪除時(shí),判斷所述目標(biāo)應(yīng)用進(jìn)程的安裝文件是否被刪除,若是, 則確定當(dāng)前的用戶行為是應(yīng)用卸載;若否,則確定當(dāng)前的用戶行為是數(shù)據(jù)清空。
4. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述確定當(dāng)前的用戶行為是數(shù)據(jù)清空之 后,包括: 在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中再次生成所述卸載監(jiān)控文件。
5. 根據(jù)權(quán)利要求3所述的方法,其特征在于,所述確定當(dāng)前的用戶行為是應(yīng)用卸載之 后,包括: 指示所述系統(tǒng)中的瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面。
6. 根據(jù)權(quán)利要求5所述的方法,其特征在于,所述指示所述系統(tǒng)中的瀏覽器訪問(wèn)所述 目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面之前,包括: 判斷所述系統(tǒng)的原生瀏覽器是否存在,若是,則觸發(fā)所述系統(tǒng)的原生瀏覽器訪問(wèn)所述 目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面;若否,則觸發(fā)所述系統(tǒng)的默認(rèn)瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn) 程的卸載調(diào)查頁(yè)面。
7. 根據(jù)權(quán)利要求1所述的方法,其特征在于,所述通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程之 后,包括: 將所述第二進(jìn)程的進(jìn)程標(biāo)識(shí)發(fā)送到j(luò)ava層進(jìn)行存儲(chǔ); 每當(dāng)檢測(cè)到所述目標(biāo)應(yīng)用進(jìn)程在所述系統(tǒng)中創(chuàng)建時(shí),判斷所述第二進(jìn)程是否在運(yùn)行, 若否,則創(chuàng)建所述第二進(jìn)程; 每當(dāng)對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行版本更新時(shí),判斷所述第二進(jìn)程是否在運(yùn)行,若是,則刪 除所述第二進(jìn)程,并重新創(chuàng)建所述第二進(jìn)程。
8. -種應(yīng)用監(jiān)控裝置,其特征在于,包括: 第一創(chuàng)建單元,用于當(dāng)目標(biāo)應(yīng)用進(jìn)程在系統(tǒng)中創(chuàng)建時(shí),運(yùn)行第一分叉函數(shù),創(chuàng)建第一進(jìn) 程,所述第一進(jìn)程為空白進(jìn)程; 第二創(chuàng)建單元,用于運(yùn)行第二分叉函數(shù),通過(guò)所述第一進(jìn)程創(chuàng)建第二進(jìn)程;所述第二進(jìn) 程為所述第一進(jìn)程的子進(jìn)程,且為所述目標(biāo)應(yīng)用進(jìn)程的監(jiān)控進(jìn)程; 維護(hù)單元,用于當(dāng)所述第二進(jìn)程創(chuàng)建完成,則刪除所述第一進(jìn)程,由所述系統(tǒng)的原始進(jìn) 程領(lǐng)養(yǎng)所述第二進(jìn)程,并由所述第二進(jìn)程對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行監(jiān)控。
9. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述第一創(chuàng)建單元具體用于: 在應(yīng)用配置文件中設(shè)定所述第一進(jìn)程的進(jìn)程標(biāo)識(shí),通過(guò)所述系統(tǒng)中合子zygote進(jìn)程 的分叉函數(shù)機(jī)制,生成以所述進(jìn)程標(biāo)識(shí)命名的空白進(jìn)程。
10. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括: 卸載監(jiān)控單元,用于在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中生成卸載監(jiān)控文件,并使 用所述第二進(jìn)程對(duì)所述卸載監(jiān)控文件進(jìn)行監(jiān)控;當(dāng)所述卸載監(jiān)控文件被刪除時(shí),判斷所述 目標(biāo)應(yīng)用進(jìn)程的安裝文件是否被刪除,若是,則確定當(dāng)前的用戶行為是應(yīng)用卸載;若否,則 確定當(dāng)前的用戶行為是數(shù)據(jù)清空。
11. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述卸載監(jiān)控單元還用于:所述確定當(dāng) 前的用戶行為是數(shù)據(jù)清空之后,在所述目標(biāo)應(yīng)用進(jìn)程的應(yīng)用數(shù)據(jù)目錄中再次生成所述卸載 監(jiān)控文件。
12. 根據(jù)權(quán)利要求10所述的裝置,其特征在于,所述卸載監(jiān)控單元還用于:所述確定當(dāng) 前的用戶行為是應(yīng)用卸載之后,指示所述系統(tǒng)中的瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào) 查頁(yè)面。
13. 根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述卸載監(jiān)控單元還用于:所述指示所 述系統(tǒng)中的瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面之前,判斷所述系統(tǒng)的原生瀏覽 器是否存在,若是,則觸發(fā)所述系統(tǒng)的原生瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面; 若否,則觸發(fā)所述系統(tǒng)的默認(rèn)瀏覽器訪問(wèn)所述目標(biāo)應(yīng)用進(jìn)程的卸載調(diào)查頁(yè)面。
14. 根據(jù)權(quán)利要求8所述的裝置,其特征在于,所述裝置還包括: 進(jìn)程維護(hù)單元,用于將所述第二進(jìn)程的進(jìn)程標(biāo)識(shí)發(fā)送到j(luò)ava層進(jìn)行存儲(chǔ);每當(dāng)檢測(cè) 到所述目標(biāo)應(yīng)用進(jìn)程在所述系統(tǒng)中創(chuàng)建時(shí),判斷所述第二進(jìn)程是否在運(yùn)行,若否,則創(chuàng)建所 述第二進(jìn)程;每當(dāng)對(duì)所述目標(biāo)應(yīng)用進(jìn)程進(jìn)行版本更新時(shí),判斷所述第二進(jìn)程是否在運(yùn)行,若 是,則刪除所述第二進(jìn)程,并重新創(chuàng)建所述第二進(jìn)程。
【文檔編號(hào)】G06F11/30GK104156298SQ201410410679
【公開(kāi)日】2014年11月19日 申請(qǐng)日期:2014年8月19日 優(yōu)先權(quán)日:2014年8月19日
【發(fā)明者】張興華, 甘暉明, 樊華恒, 魏慶華, 吳佳炘, 熊良建, 曾丹, 王梓茗, 林孟光 申請(qǐng)人:騰訊科技(深圳)有限公司