專利名稱:進(jìn)程控制裝置和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)應(yīng)用領(lǐng)域,具體涉及一種進(jìn)程控制裝置和方法。
背景技術(shù):
目前的網(wǎng)絡(luò)應(yīng)用(例如360桌面或?yàn)g覽器)通常會(huì)面對(duì)數(shù)千萬(wàn)的在線用戶,大量的用戶應(yīng)用的情況下,消息能否及時(shí)發(fā)送,就顯得非常重要,直接影響用戶體驗(yàn)。在線用戶是放在一個(gè)隊(duì)列中,需要一個(gè)守護(hù)進(jìn)程(Daemon)不斷去處理該用戶隊(duì)列,現(xiàn)有技術(shù)中采用了使用PHP (Hypertext Preprocessor, 一種腳本語(yǔ)言,可以在命令行模式下執(zhí)行)腳本的定時(shí)任務(wù),這么一種模擬守護(hù)進(jìn)程的方式來(lái)實(shí)現(xiàn)守護(hù)進(jìn)程,取得不錯(cuò)的效果。守護(hù)進(jìn)程是運(yùn)行在后臺(tái)的一種特殊進(jìn)程。它獨(dú)立于控制終端并且周期性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護(hù)進(jìn)程最重要的特性是后臺(tái)運(yùn)行。其次,守護(hù)進(jìn)程必須與其運(yùn)行前的環(huán)境隔離開來(lái)。這些環(huán)境包括未關(guān)閉的文件描述符,控制終端,會(huì)話和進(jìn)程組,工作目錄以及文件創(chuàng)建掩模等。這些環(huán)境通常是守護(hù)進(jìn)程從執(zhí)行它的父進(jìn)程(特別是提供用戶使用界面的軟件(shell))中繼承下來(lái)的。最后,守護(hù)進(jìn)程的啟動(dòng)方式有其特殊之處。它可以在Linux系統(tǒng)啟動(dòng)時(shí)從啟動(dòng)腳本/etc/rc. d中啟動(dòng),可以由作業(yè)規(guī)劃進(jìn)程(crond)啟動(dòng),還可以由用戶終端(通常是she 11)執(zhí)行??傊?,除這些特殊性以外,守護(hù)進(jìn)程與普通進(jìn)程基本上沒有什么區(qū)別。因此,編寫守護(hù)進(jìn)程實(shí)際上是把一個(gè)普通進(jìn)程按照上述的守護(hù)進(jìn)程的特性改造成為守護(hù)進(jìn)程。在設(shè)置周期性被執(zhí)行的指令(crontab)計(jì)劃任務(wù)中,寫入PHP腳本,定為每分鐘都會(huì)利用fork函數(shù)調(diào)度一個(gè)進(jìn)程來(lái)執(zhí)行PHP腳本。假設(shè)每個(gè)PHP腳本的最大執(zhí)行時(shí)間是10分鐘,超過(guò)10分鐘就停止執(zhí)行。在10分鐘內(nèi),保證能有10個(gè)進(jìn)程在執(zhí)行,并且,一個(gè)PHP腳本執(zhí)行時(shí)間到期后,其余PHP腳本還在繼續(xù)執(zhí)行,相當(dāng)于該P(yáng)HP腳本不間斷的執(zhí)行,也就模擬了守護(hù)進(jìn)程的功能。Linux中的nohup命令的功能就是不掛斷的執(zhí)行命令,同時(shí)nohup把程序的所有輸出放到當(dāng)前目錄的nohup. out文件中,如果文件不可寫,則放到〈用戶主目錄>/nohup. out文件中。那么有了這個(gè)命令以后,PHP程序就可以被改寫成shell腳本,使用循環(huán)來(lái)讓腳本一直運(yùn)行,那么不管終端窗口是否關(guān)閉,都能夠讓PHP腳本一直運(yùn)行。當(dāng)然,當(dāng)PHP進(jìn)程被殺或者操作系統(tǒng)重啟的情況下,PHP腳本自然就會(huì)中止了。但是,操作系統(tǒng)重啟或守護(hù)進(jìn)程可能導(dǎo)致腳本進(jìn)程意外中斷,此時(shí)如果不能即時(shí)重啟,那么無(wú)法為用戶提供腳本進(jìn)程的處理,則網(wǎng)絡(luò)應(yīng)用提供的服務(wù)就會(huì)中斷。另外,若守護(hù)進(jìn)程長(zhǎng)時(shí)間運(yùn)轉(zhuǎn),導(dǎo)致腳本進(jìn)程也長(zhǎng)時(shí)間工作,若腳本進(jìn)程的代碼存在內(nèi)存泄漏的情況,長(zhǎng)時(shí)間運(yùn)轉(zhuǎn)會(huì)導(dǎo)致問題會(huì)逐漸放大,直到系統(tǒng)崩潰。
發(fā)明內(nèi)容
鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的進(jìn)程控制裝置和相應(yīng)的進(jìn)程控制方法。
依據(jù)本發(fā)明的一個(gè)方面,提供了一種進(jìn)程控制裝置,包括定時(shí)器,配置為定制多個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng),其中,多個(gè)腳本進(jìn)程并行處理;計(jì)時(shí)器,配置為對(duì)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間進(jìn)行計(jì)時(shí);觸發(fā)器,配置為對(duì)于任意一個(gè)腳本進(jìn)程,當(dāng)計(jì)時(shí)器的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到該腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)時(shí),退出該計(jì)時(shí)器對(duì)應(yīng)的腳本進(jìn)程,觸發(fā)新的腳本進(jìn)程運(yùn)行;處理器,配置為計(jì)時(shí)器的計(jì)時(shí)時(shí)長(zhǎng)未達(dá)到運(yùn)行時(shí)長(zhǎng)時(shí),判斷當(dāng)前用戶隊(duì)列中是否存在用戶數(shù)據(jù),若是,則對(duì)用戶數(shù)據(jù)進(jìn)行處理,若否,則待指定時(shí)長(zhǎng)后對(duì)用戶數(shù)據(jù)再次進(jìn)行判斷??蛇x地,上述進(jìn)程控制裝置還包括銷毀器,配置為銷毀退出的腳本進(jìn)程??蛇x地,計(jì)時(shí)器還配置為在操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷導(dǎo)致腳本進(jìn)程中斷時(shí),針對(duì)中斷的腳本進(jìn)程繼續(xù)進(jìn)行計(jì)時(shí),直至到達(dá)運(yùn)行時(shí)長(zhǎng)??蛇x地,上述進(jìn)程控制裝置設(shè)置在Cron定時(shí)腳本任務(wù)中。根據(jù)本發(fā)明的另一方面,提供了一種進(jìn)程控制方法,包括對(duì)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間進(jìn)行計(jì)時(shí),其中,多個(gè)腳本進(jìn)程并行處理,且預(yù)設(shè)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng);當(dāng)其中任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到為該腳本進(jìn)程設(shè)置的運(yùn)行時(shí)長(zhǎng)時(shí),退出該腳本進(jìn)程,并觸發(fā)新的腳本進(jìn)程運(yùn)行;當(dāng)其中任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)未達(dá)到運(yùn)行時(shí)長(zhǎng)時(shí),判斷當(dāng)前用戶隊(duì)列中是否存在用戶數(shù)據(jù),若是,則對(duì)用戶數(shù)據(jù)進(jìn)行處理,若否,則待指定時(shí)長(zhǎng)后重新判斷。可選的,退出當(dāng)前腳本進(jìn)程之后,上述進(jìn)程控制方法還包括銷毀當(dāng)前腳本進(jìn)程??蛇x的,上述進(jìn)程控制方法還包括在操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷導(dǎo)致腳本進(jìn)程中斷時(shí),繼續(xù)對(duì)中斷的每個(gè)腳本進(jìn)程繼續(xù)的計(jì)時(shí)操作;以及當(dāng)任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到運(yùn)行時(shí)長(zhǎng)時(shí),該腳本進(jìn)程退出該腳本進(jìn)程,并觸發(fā)新的腳本進(jìn)程運(yùn)行??蛇x的,指定時(shí)長(zhǎng)為I秒??蛇x的,每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)相同或不同??蛇x的,當(dāng)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)相同時(shí),設(shè)置每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)為10分鐘。可選的,設(shè)置10個(gè)腳本同時(shí)并行處理。在一個(gè)實(shí)施例中,設(shè)置多個(gè)腳本進(jìn)程并行處理,相對(duì)于現(xiàn)有技術(shù)的用戶放在一個(gè)隊(duì)列中的情況能夠大大加快應(yīng)用處理的速度。特別在網(wǎng)絡(luò)應(yīng)用的用戶較多時(shí),多個(gè)腳本進(jìn)程的并行處理能夠提高處理速度,提高用戶的感受體驗(yàn)。在一個(gè)實(shí)施例中,利用計(jì)時(shí)器對(duì)每個(gè)腳本進(jìn)程進(jìn)行計(jì)時(shí),當(dāng)計(jì)時(shí)器的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到該腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)時(shí),觸發(fā)器就會(huì)觸發(fā)新的操作,觸發(fā)當(dāng)前腳本進(jìn)程退出,并觸發(fā)新的腳本進(jìn)程運(yùn)行。由此可見,本發(fā)明中的腳本進(jìn)程是持續(xù)更新啟動(dòng)的,保證了有一定數(shù)量的腳本進(jìn)程處于運(yùn)行狀態(tài)的,即使操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷,觸發(fā)器也會(huì)在計(jì)時(shí)到達(dá)的情況下觸發(fā)新的腳本進(jìn)程運(yùn)行,不會(huì)造成服務(wù)中斷。在一個(gè)實(shí)施例中,由于每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間是設(shè)定的,計(jì)時(shí)器計(jì)時(shí)到達(dá)則觸發(fā)器觸發(fā)該腳本進(jìn)程退出運(yùn)行狀態(tài),由此可見,每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間較短,即使該腳本進(jìn)程的代碼存在內(nèi)存泄漏的情況,也不會(huì)因長(zhǎng)時(shí)間運(yùn)轉(zhuǎn)導(dǎo)致問題放大,從而避免了系統(tǒng)崩潰的情況。上述說(shuō)明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說(shuō)明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉本發(fā)明的具體實(shí)施方式
。
通過(guò)閱讀下文優(yōu)選實(shí)施方式的詳細(xì)描述,各種其他的優(yōu)點(diǎn)和益處對(duì)于本領(lǐng)域普通技術(shù)人員將變得清楚明了。附圖僅用于示出優(yōu)選實(shí)施方式的目的,而并不認(rèn)為是對(duì)本發(fā)明的限制。而且在整個(gè)附圖中,用相同的參考符號(hào)表示相同的部件。在附圖中圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的進(jìn)程控制裝置的結(jié)構(gòu)示意圖;圖2示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的PHP模擬守護(hù)進(jìn)程的流程圖;圖3示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的進(jìn)程控制方法的流程圖;圖4示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的進(jìn)程控制方法的另一流程圖;以及圖5示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的腳本進(jìn)程意外中斷的處理方法的流程圖。
具體實(shí)施例方式下面將參照附圖更詳細(xì)地描述本公開的示例性實(shí)施例。雖然附圖中顯示了本公開的示例性實(shí)施例,然而應(yīng)當(dāng)理解,可以以各種形式實(shí)現(xiàn)本公開而不應(yīng)被這里闡述的實(shí)施例所限制。相反,提供這些實(shí)施例是為了能夠更透徹地理解本公開,并且能夠?qū)⒈竟_的范圍完整的傳達(dá)給本領(lǐng)域的技術(shù)人員。圖1示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的進(jìn)程控制裝置的結(jié)構(gòu)示意圖。參見圖1,該進(jìn)程控制裝置包括定時(shí)器110、計(jì)時(shí)器120以及觸發(fā)器130。定時(shí)器110定制了多個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng),其中,多個(gè)腳本進(jìn)程是并行處理的,每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)可以定制為相同的時(shí)長(zhǎng),也可以定制為不同的時(shí)長(zhǎng)。例如,可以設(shè)置每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)為10分鐘,也可以設(shè)置第一個(gè)腳本進(jìn)程的運(yùn)行時(shí)間是10分鐘,而第二個(gè)腳本進(jìn)程的運(yùn)行時(shí)間為5分鐘,等等。此處的10分鐘和5分鐘僅僅是一個(gè)實(shí)例,還可以是20分鐘、30分鐘等時(shí)間,具體的運(yùn)行時(shí)長(zhǎng)根據(jù)腳本進(jìn)程的屬性進(jìn)行選擇。計(jì)時(shí)器120,耦接到定時(shí)器110,對(duì)定時(shí)器110定時(shí)的每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間進(jìn)行計(jì)時(shí)。若采用的計(jì)時(shí)器的功能較為單一,只能為一個(gè)腳本進(jìn)程進(jìn)行計(jì)時(shí),則為每個(gè)腳本進(jìn)程配置一個(gè)計(jì)時(shí)器。若采用的計(jì)時(shí)器可以實(shí)現(xiàn)多個(gè)對(duì)象同步計(jì)時(shí),則可以根據(jù)腳本進(jìn)程的數(shù)量與計(jì)時(shí)器的計(jì)時(shí)對(duì)象進(jìn)行配置。例如,一共有10個(gè)腳本進(jìn)程,一個(gè)計(jì)時(shí)器可以同時(shí)為5個(gè)腳本進(jìn)程進(jìn)行計(jì)時(shí),則只需要配置2個(gè)計(jì)時(shí)器即可。觸發(fā)器130,耦接到計(jì)時(shí)器120。對(duì)于任意一個(gè)腳本進(jìn)程,當(dāng)計(jì)時(shí)器120的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到該腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)時(shí),觸發(fā)器130觸發(fā)新的操作,令該計(jì)時(shí)器120對(duì)應(yīng)的腳本進(jìn)程退出運(yùn)行狀態(tài),并觸發(fā)新的腳本進(jìn)程進(jìn)行運(yùn)行。在本發(fā)明實(shí)施例提供的進(jìn)程控制裝置中,設(shè)置多個(gè)腳本進(jìn)程并行處理,相對(duì)于現(xiàn)有技術(shù)的用戶放在一個(gè)隊(duì)列中的情況能夠大大加快應(yīng)用處理的速度。特別在網(wǎng)絡(luò)應(yīng)用的用戶較多時(shí),多個(gè)腳本進(jìn)程的并行處理能夠提高處理速度,提高用戶的感受體驗(yàn)。進(jìn)一步,利用計(jì)時(shí)器對(duì)每個(gè)腳本進(jìn)程進(jìn)行計(jì)時(shí),當(dāng)計(jì)時(shí)器的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到該腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)時(shí),觸發(fā)器就會(huì)觸發(fā)新的操作,觸發(fā)當(dāng)前腳本進(jìn)程退出,并觸發(fā)新的腳本進(jìn)程運(yùn)行。由此可見,本發(fā)明中的腳本進(jìn)程是持續(xù)更新啟動(dòng)的,保證了有一定數(shù)量的PHP腳本處于運(yùn)行狀態(tài)的,即使操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷,觸發(fā)器也會(huì)在計(jì)時(shí)到達(dá)的情況下觸發(fā)新的腳本進(jìn)程運(yùn)行,不會(huì)造成服務(wù)中斷。并且,在本發(fā)明中,由于每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間是設(shè)定的,計(jì)時(shí)器計(jì)時(shí)到達(dá)則觸發(fā)器觸發(fā)該腳本進(jìn)程退出運(yùn)行狀態(tài),由此可見,每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間較短,即使該腳本進(jìn)程的代碼存在內(nèi)存泄漏的情況,也不會(huì)因長(zhǎng)時(shí)間運(yùn)轉(zhuǎn)導(dǎo)致問題放大,從而避免了系統(tǒng)崩潰的情況。其中,各腳本進(jìn)程的語(yǔ)言可以是能夠?qū)崿F(xiàn)其相應(yīng)功能的任意語(yǔ)言,例如,較為常見的PHP、C、C++、Iinux等語(yǔ)言均可。目前使用較多的是PHP腳本,當(dāng)然,使用C語(yǔ)言效率會(huì)更高。假設(shè)每個(gè)PHP腳本的運(yùn)行時(shí)間為10分鐘,在本發(fā)明中,超過(guò)10分鐘后,PHP腳本自動(dòng)終止運(yùn)行,也就不存在內(nèi)存泄漏的風(fēng)險(xiǎn)。而另外如果操作系統(tǒng)重啟或守護(hù)進(jìn)程意外中斷,觸發(fā)器也會(huì)繼續(xù)觸發(fā)PHP腳本,保證有一定的PHP腳本(例如10個(gè))處于運(yùn)行狀態(tài),消息系統(tǒng)的穩(wěn)定性就能夠得到保證。為了防止內(nèi)存泄漏以及合理回收,參見圖1,本發(fā)明實(shí)施例提供的進(jìn)程控制裝置還包括銷毀器140,銷毀退出的腳本進(jìn)程。在出現(xiàn)操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷導(dǎo)致腳本進(jìn)程中斷的意外情況時(shí),為保證系統(tǒng)的穩(wěn)定性,每個(gè)計(jì)時(shí)器120會(huì)針對(duì)中斷的腳本進(jìn)程繼續(xù)進(jìn)行計(jì)時(shí),直至到達(dá)運(yùn)行時(shí)長(zhǎng)。當(dāng)計(jì)時(shí)器120達(dá)到運(yùn)行時(shí)長(zhǎng)時(shí),其必然會(huì)觸發(fā)與該計(jì)時(shí)器120耦合的觸發(fā)器130,觸發(fā)新的腳本進(jìn)程運(yùn)行,為用戶提供服務(wù),避免出現(xiàn)服務(wù)中斷的情況。參見圖1,本發(fā)明實(shí)施例提供的進(jìn)程控制裝置還包括處理器150,耦接到計(jì)時(shí)器120。處理器150能夠在腳本進(jìn)程的執(zhí)行過(guò)程中確認(rèn)對(duì)用戶數(shù)據(jù)進(jìn)行處理。上文提及,用戶數(shù)據(jù)會(huì)放在用戶隊(duì)列中,按順序進(jìn)行處理。因此,當(dāng)計(jì)時(shí)器120的計(jì)時(shí)時(shí)長(zhǎng)未達(dá)到運(yùn)行時(shí)長(zhǎng)時(shí),處理器150會(huì)判斷當(dāng)前用戶隊(duì)列中是否存在用戶數(shù)據(jù)。當(dāng)用戶隊(duì)列中存在用戶數(shù)據(jù)時(shí),處理器150直接對(duì)用戶數(shù)據(jù)進(jìn)行處理。當(dāng)用戶隊(duì)列中不存在用戶數(shù)據(jù)時(shí),處理器待指定時(shí)長(zhǎng)后對(duì)用戶數(shù)據(jù)再次進(jìn)行判斷。此處的指定時(shí)長(zhǎng)可以是設(shè)置的任意時(shí)長(zhǎng),但不能超出腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)。若該腳本進(jìn)程已運(yùn)行一段時(shí)間,則在計(jì)時(shí)器的基礎(chǔ)上,加上指定時(shí)長(zhǎng),也不能超出腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)。若超出,則該腳本進(jìn)程就退出運(yùn)行狀態(tài),不再處理數(shù)據(jù),無(wú)須再進(jìn)行用戶數(shù)據(jù)的判斷??蛇x的,本發(fā)明實(shí)施例提供的進(jìn)程控制裝置設(shè)置在Cron定時(shí)腳本任務(wù)中,利用Cron腳本任務(wù)實(shí)現(xiàn)對(duì)腳本進(jìn)程(例如PHP腳本)的調(diào)度和應(yīng)用。目前,360開放平臺(tái)的消息系統(tǒng),為千萬(wàn)級(jí)的用戶提供消息服務(wù)。由于用戶數(shù)巨大,為了讓全部用戶能在短時(shí)間內(nèi)收到消息,必須采用多個(gè)進(jìn)程來(lái)處理消息下發(fā)。消息下發(fā)模塊使用的PHP腳本,當(dāng)然如果用C語(yǔ)言來(lái)實(shí)現(xiàn),效率會(huì)更高。單個(gè)PHP腳本所能處理的用戶數(shù)為5萬(wàn)/秒,利用Cron計(jì)劃任務(wù)定時(shí)啟動(dòng)多個(gè)PHP腳本并行處理,將大大提高消息下發(fā)速度,同時(shí)也保證了消息服務(wù)的穩(wěn)定性。另外,若設(shè)置每個(gè)PHP腳本最大運(yùn)行時(shí)間為10分鐘,意味著10分鐘后,該腳本將終止,當(dāng)前進(jìn)程退出,從而保證了內(nèi)存不泄漏。圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的PHP模擬守護(hù)進(jìn)程的流程圖。參見圖2,該流程起始于在Cron計(jì)劃任務(wù)中里配置定時(shí)任務(wù)。定時(shí)任務(wù)配置結(jié)束后,系統(tǒng)每分鐘執(zhí)行一個(gè)PHP腳本。當(dāng)每個(gè)PHP腳本執(zhí)行時(shí)長(zhǎng)超過(guò)10分鐘,自動(dòng)銷毀該進(jìn)程,PHP腳本終止。而在腳本進(jìn)程執(zhí)行過(guò)程中,會(huì)判斷用戶隊(duì)列中是否有用戶數(shù)據(jù),沒有則等待(sleep) I秒再執(zhí)行判斷PHP腳本,如此循環(huán)執(zhí)行下去,直至超時(shí)退出。圖3示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的進(jìn)程控制方法的流程圖。參見圖3,該流程起始于步驟S302。在步驟S302中,對(duì)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間進(jìn)行計(jì)時(shí)。其中,步驟S302中提及的多個(gè)腳本進(jìn)程并行處理,提高腳本進(jìn)程處理的速度。其中,預(yù)設(shè)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)均是預(yù)設(shè)好的,例如預(yù)設(shè)為10分鐘。每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)可以相同,也可以不同。當(dāng)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)相同時(shí),例如可以設(shè)置每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)均為10分鐘。當(dāng)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)不同時(shí),則例如可以設(shè)置第一個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)為10分鐘,而第二個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)為20分鐘,等等??蛇x的,可以設(shè)置10個(gè)腳本進(jìn)程同時(shí)并行處理。當(dāng)然,此處的10個(gè)腳本僅僅是一個(gè)優(yōu)選的實(shí)施例,在實(shí)施過(guò)程中,可以根據(jù)具體情況確定腳本的數(shù)量,該數(shù)量通常取決于客戶端的資源剩余量以及每條腳本進(jìn)程所占用的資源多少。例如,若 客戶端的資源大多空閑,則可以執(zhí)行幾十甚至上百個(gè)腳本進(jìn)程,但是,若客戶端的資源較為緊張,則可能只能執(zhí)行幾個(gè)腳本進(jìn)程。當(dāng)步驟S302中的其中任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到為該腳本進(jìn)程設(shè)置的運(yùn)行時(shí)長(zhǎng)時(shí),啟動(dòng)步驟S304,S卩,退出該腳本進(jìn)程,并觸發(fā)新的腳本進(jìn)程運(yùn)行。在本例中,為了使得計(jì)時(shí)效果精確,并能夠及時(shí)的觸發(fā)腳本進(jìn)程的退出流程,考慮使用計(jì)時(shí)器對(duì)各腳本進(jìn)程進(jìn)行計(jì)時(shí)。對(duì)任意一個(gè)腳本進(jìn)程而言,當(dāng)計(jì)時(shí)器計(jì)時(shí)結(jié)束(即達(dá)到該腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)),可以通知客戶端的控制模塊或管理模塊,令其結(jié)束該腳本進(jìn)程,或者,也可以由該計(jì)時(shí)器觸發(fā)該腳本進(jìn)程自動(dòng)退出。圖4示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的進(jìn)程控制的另外一種流程圖。參見圖4,步驟S304在實(shí)施時(shí),當(dāng)退出當(dāng)前腳本進(jìn)程之后,還可以執(zhí)行步驟S306,銷毀當(dāng)前已退出的腳本進(jìn)程。在本例中,采用銷毀當(dāng)前腳本進(jìn)程的操作,能夠釋放本運(yùn)行的腳本進(jìn)程占用的資源,進(jìn)而提高系統(tǒng)資源的利用率,同時(shí)避免了因長(zhǎng)期運(yùn)行可能導(dǎo)致的內(nèi)存泄漏的問題。實(shí)施時(shí),可能會(huì)腳本進(jìn)程中斷的意外情況,例如,可能會(huì)因操作系統(tǒng)重啟導(dǎo)致腳本進(jìn)程中斷,再例如,還可能會(huì)因守護(hù)進(jìn)程意外中斷導(dǎo)致腳本進(jìn)程中斷時(shí),再例如,還可能因新的腳本進(jìn)程或守護(hù)進(jìn)程需要占用大量資源從而導(dǎo)致腳本進(jìn)程被迫中斷的。相應(yīng)的,本例中提供了對(duì)于腳本進(jìn)程意外中斷的情況的處理方式。圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的腳本進(jìn)程意外中斷的處理方式,包括步驟S502至步驟S504。步驟S502、當(dāng)腳本進(jìn)程意外中斷時(shí),繼續(xù)對(duì)中斷的每個(gè)腳本進(jìn)程繼續(xù)的計(jì)時(shí)操作。步驟S504、當(dāng)任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到運(yùn)行時(shí)長(zhǎng)時(shí),該腳本進(jìn)程退出該腳本進(jìn)程,并觸發(fā)新的腳本進(jìn)程運(yùn)行。值得說(shuō)明的是,步驟S504中的腳本進(jìn)程退出運(yùn)行后,若出于提高系統(tǒng)資源利用率的目的,該腳本進(jìn)程也應(yīng)該被銷毀,將其占用的資源釋放出來(lái),以便于新的腳本進(jìn)程使用。參照?qǐng)D5所示的方法,雖然因操作系統(tǒng)重啟或守護(hù)進(jìn)程意外中斷導(dǎo)致腳本進(jìn)程中斷,但是,計(jì)時(shí)操作仍在進(jìn)行。在計(jì)時(shí)時(shí)長(zhǎng)達(dá)到一定的閾值時(shí),會(huì)觸發(fā)新的腳本進(jìn)程運(yùn)行,為用戶提供服務(wù),不會(huì)因意外情況導(dǎo)致服務(wù)中斷,提高了用戶的感受體驗(yàn)。腳本進(jìn)程被創(chuàng)建之后,若沒有被中斷或銷毀,則該腳本進(jìn)程處于執(zhí)行過(guò)程或者稱為運(yùn)行狀態(tài)。在本例中,對(duì)任意一個(gè)腳本進(jìn)程而言,當(dāng)該腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)未達(dá)到運(yùn)行時(shí)長(zhǎng)時(shí),即該腳本進(jìn)程處于運(yùn)行狀態(tài),則對(duì)該腳本進(jìn)程的處理對(duì)象進(jìn)行判斷,判斷其是否是處于工作狀態(tài)還是閑置。具體的,判斷當(dāng)前用戶隊(duì)列中是否存在用戶數(shù)據(jù),若是,則對(duì)用戶數(shù)據(jù)進(jìn)行處理,若否,則待指定時(shí)長(zhǎng)后重新判斷??蛇x的,指定時(shí)長(zhǎng)可以設(shè)置為I秒。綜上,本發(fā)明實(shí)施例達(dá)到如下有益效果在一個(gè)實(shí)施例中,設(shè)置多個(gè)腳本進(jìn)程并行處理,相對(duì)于現(xiàn)有技術(shù)的用戶放在一個(gè)隊(duì)列中的情況能夠大大加快應(yīng)用處理的速度。特別在網(wǎng)絡(luò)應(yīng)用的用戶較多時(shí),多個(gè)腳本進(jìn)程的并行處理能夠提高處理速度,提高用戶的感受體驗(yàn)。在一個(gè)實(shí)施例中,利用計(jì)時(shí)器對(duì)每個(gè)腳本進(jìn)程進(jìn)行計(jì)時(shí),當(dāng)計(jì)時(shí)器的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到該腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)時(shí),觸發(fā)器就會(huì)觸發(fā)新的操作,觸發(fā)當(dāng)前腳本進(jìn)程退出,并觸發(fā)新的腳本進(jìn)程運(yùn)行。由此可見,本發(fā)明中的腳本進(jìn)程是持續(xù)更新啟動(dòng)的,保證了有一定數(shù)量的腳本進(jìn)程處于運(yùn)行狀態(tài)的,即使操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷,觸發(fā)器也會(huì)在計(jì)時(shí)到達(dá)的情況下觸發(fā)新的腳本進(jìn)程運(yùn)行,不會(huì)造成服務(wù)中斷。在一個(gè)實(shí)施例中,由于每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間是設(shè)定的,計(jì)時(shí)器計(jì)時(shí)到達(dá)則觸發(fā)器觸發(fā)該腳本進(jìn)程退出運(yùn)行狀態(tài),由此可見,每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間較短,即使該腳本進(jìn)程的代碼存在內(nèi)存泄漏的情況,也不會(huì)因長(zhǎng)時(shí)間運(yùn)轉(zhuǎn)導(dǎo)致問題放大,從而避免了系統(tǒng)崩潰的情況。在此提供的算法和顯示不與任何特定計(jì)算機(jī)、虛擬系統(tǒng)或者其它設(shè)備固有相關(guān)。各種通用系統(tǒng)也可以與基于在此的示教一起使用。根據(jù)上面的描述,構(gòu)造這類系統(tǒng)所要求的結(jié)構(gòu)是顯而易見的。此外,本發(fā)明也不針對(duì)任何特定編程語(yǔ)言。應(yīng)當(dāng)明白,可以利用各種編程語(yǔ)言實(shí)現(xiàn)在此描述的本發(fā)明的內(nèi)容,并且上面對(duì)特定語(yǔ)言所做的描述是為了披露本發(fā)明的最佳實(shí)施方式。在此處所提供的說(shuō)明書中,說(shuō)明了大量具體細(xì)節(jié)。然而,能夠理解,本發(fā)明的實(shí)施例可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐。在一些實(shí)例中,并未詳細(xì)示出公知的方法、結(jié)構(gòu)和技術(shù),以便不模糊對(duì)本說(shuō)明書的理解。類似地,應(yīng)當(dāng)理解,為了精簡(jiǎn)本公開并幫助理解各個(gè)發(fā)明方面中的一個(gè)或多個(gè),在上面對(duì)本發(fā)明的示例性實(shí)施例的描述中,本發(fā)明的各個(gè)特征有時(shí)被一起分組到單個(gè)實(shí)施例、圖、或者對(duì)其的描述中。然而,并不應(yīng)將該公開的方法解釋成反映如下意圖即所要求保護(hù)的本發(fā)明要求比在每個(gè)權(quán)利要求中所明確記載的特征更多的特征。更確切地說(shuō),如下面的權(quán)利要求書所反映的那樣,發(fā)明方面在于少于前面公開的單個(gè)實(shí)施例的所有特征。因此,遵循具體實(shí)施方式
的權(quán)利要求書由此明確地并入該具體實(shí)施方式
,其中每個(gè)權(quán)利要求本身都作為本發(fā)明的單獨(dú)實(shí)施例。 本領(lǐng)域那些技術(shù)人員可以理解,可以對(duì)實(shí)施例中的設(shè)備中的模塊進(jìn)行自適應(yīng)性地改變并且把它們?cè)O(shè)置在與該實(shí)施例不同的一個(gè)或多個(gè)設(shè)備中??梢园褜?shí)施例中的模塊或單元或組件組合成一個(gè)模塊或單元或組件,以及此外可以把它們分成多個(gè)子模塊或子單元或子組件。除了這樣的特征和/或過(guò)程或者單元中的至少一些是相互排斥之外,可以采用任何組合對(duì)本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設(shè)備的所有過(guò)程或單元進(jìn)行組合。除非另外明確陳述,本說(shuō)明書(包括伴隨的權(quán)利要求、摘要和附圖)中公開的每個(gè)特征可以由提供相同、等同或相似目的的替代特征來(lái)代替。此外,本領(lǐng)域的技術(shù)人員能夠理解,盡管在此所述的一些實(shí)施例包括其它實(shí)施例中所包括的某些特征而不是其它特征,但是不同實(shí)施例的特征的組合意味著處于本發(fā)明的范圍之內(nèi)并且形成不同的實(shí)施例。例如,在下面的權(quán)利要求書中,所要求保護(hù)的實(shí)施例的任意之一都可以以任意的組合方式來(lái)使用。本發(fā)明的各個(gè)部件實(shí)施例可以以硬件實(shí)現(xiàn),或者以在一個(gè)或者多個(gè)處理器上運(yùn)行的軟件模塊實(shí)現(xiàn),或者以它們的組合實(shí)現(xiàn)。本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)理解,可以在實(shí)踐中使用微處理器或者數(shù)字信號(hào)處理器(DSP )來(lái)實(shí)現(xiàn)根據(jù)本發(fā)明實(shí)施例的進(jìn)程控制裝置中的一些或者全部部件的一些或者全部功能。本發(fā)明還可以實(shí)現(xiàn)為用于執(zhí)行這里所描述的方法的一部分或者全部的設(shè)備或者裝置程序(例如,計(jì)算機(jī)程序和計(jì)算機(jī)程序產(chǎn)品)。這樣的實(shí)現(xiàn)本發(fā)明的程序可以存儲(chǔ)在計(jì)算機(jī)可讀介質(zhì)上,或者可以具有一個(gè)或者多個(gè)信號(hào)的形式。這樣的信號(hào)可以從因特網(wǎng)網(wǎng)站上下載得到,或者在載體信號(hào)上提供,或者以任何其他形式提供。應(yīng)該注意的是上述實(shí)施例對(duì)本發(fā)明進(jìn)行說(shuō)明而不是對(duì)本發(fā)明進(jìn)行限制,并且本領(lǐng)域技術(shù)人員在不脫離所附權(quán)利要求的范圍的情況下可設(shè)計(jì)出替換實(shí)施例。在權(quán)利要求中,不應(yīng)將位于括號(hào)之間的任何參考符號(hào)構(gòu)造成對(duì)權(quán)利要求的限制。單詞“包含”不排除存在未列在權(quán)利要求中的元件或步驟。位于元件之前的單詞“一”或“一個(gè)”不排除存在多個(gè)這樣的元件。本發(fā)明可以借助于包括有若干不同元件的硬件以及借助于適當(dāng)編程的計(jì)算機(jī)來(lái)實(shí)現(xiàn)。在列舉了若干裝置的單元權(quán)利要求中,這些裝置中的若干個(gè)可以是通過(guò)同一個(gè)硬件項(xiàng)來(lái)具體體現(xiàn)。單詞第一、第二、以及第三等的使用不表示任何順序??蓪⑦@些單詞解釋為名稱。
權(quán)利要求
1.一種進(jìn)程控制裝置,包括定時(shí)器,配置為定制多個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng),其中,所述多個(gè)腳本進(jìn)程并行處理;計(jì)時(shí)器,配置為對(duì)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間進(jìn)行計(jì)時(shí);觸發(fā)器,配置為對(duì)于任意一個(gè)腳本進(jìn)程,當(dāng)所述計(jì)時(shí)器的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到該腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)時(shí),退出該計(jì)時(shí)器對(duì)應(yīng)的腳本進(jìn)程,觸發(fā)新的腳本進(jìn)程運(yùn)行;處理器,配置為所述計(jì)時(shí)器的計(jì)時(shí)時(shí)長(zhǎng)未達(dá)到所述運(yùn)行時(shí)長(zhǎng)時(shí),判斷當(dāng)前用戶隊(duì)列中是否存在用戶數(shù)據(jù),若是,則對(duì)用戶數(shù)據(jù)進(jìn)行處理,若否,則待指定時(shí)長(zhǎng)后對(duì)用戶數(shù)據(jù)再次進(jìn)行判斷。
2.根據(jù)權(quán)利要求1所述的裝置,其特征在于,還包括銷毀器,配置為銷毀退出的腳本進(jìn)程。
3.根據(jù)權(quán)利要求1或2所述的裝置,其特征在于,所述計(jì)時(shí)器還配置為在操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷導(dǎo)致腳本進(jìn)程中斷時(shí),針對(duì)中斷的腳本進(jìn)程繼續(xù)進(jìn)行計(jì)時(shí),直至到達(dá)所述運(yùn)行時(shí)長(zhǎng)。
4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的裝置,其特征在于,所述裝置設(shè)置在Cron定時(shí)腳本任務(wù)中。
5.一種進(jìn)程控制方法,包括對(duì)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間進(jìn)行計(jì)時(shí),其中,多個(gè)腳本進(jìn)程并行處理,且預(yù)設(shè)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng);當(dāng)其中任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到為該腳本進(jìn)程設(shè)置的運(yùn)行時(shí)長(zhǎng)時(shí),退出該腳本進(jìn)程,并觸發(fā)新的腳本進(jìn)程運(yùn)行;當(dāng)其中任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)未達(dá)到所述運(yùn)行時(shí)長(zhǎng)時(shí),判斷當(dāng)前用戶隊(duì)列中是否存在用戶數(shù)據(jù),若是,則對(duì)用戶數(shù)據(jù)進(jìn)行處理,若否,則待指定時(shí)長(zhǎng)后重新判斷。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述退出當(dāng)前腳本進(jìn)程之后,還包括銷毀所述當(dāng)前腳本進(jìn)程。
7.根據(jù)權(quán)利要求5或6所述的方法,其特征在于,還包括在操作系統(tǒng)重啟或者守護(hù)進(jìn)程意外中斷導(dǎo)致腳本進(jìn)程中斷時(shí),繼續(xù)對(duì)中斷的所述每個(gè)腳本進(jìn)程繼續(xù)的計(jì)時(shí)操作;以及當(dāng)任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到所述運(yùn)行時(shí)長(zhǎng)時(shí),該腳本進(jìn)程退出該腳本進(jìn)程, 并觸發(fā)新的腳本進(jìn)程運(yùn)行。
8.根據(jù)權(quán)利要求5至7中任一項(xiàng)所述的方法,其特征在于,所述指定時(shí)長(zhǎng)為I秒。
9.根據(jù)權(quán)利要求5至8任一項(xiàng)所述的方法,其特征在于,所述每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)相同或不同。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,當(dāng)所述每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)相同時(shí),設(shè)置所述每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng)為10分鐘。
11.根據(jù)權(quán)利要求5至10任一項(xiàng)所述的方法,其特征在于,設(shè)置10個(gè)腳本同時(shí)并行處理。
全文摘要
本發(fā)明公開了一種進(jìn)程控制裝置和方法,其中所述方法包括對(duì)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)間進(jìn)行計(jì)時(shí),其中,多個(gè)腳本進(jìn)程并行處理,且預(yù)設(shè)每個(gè)腳本進(jìn)程的運(yùn)行時(shí)長(zhǎng);當(dāng)其中任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)達(dá)到為該腳本進(jìn)程設(shè)置的運(yùn)行時(shí)長(zhǎng)時(shí),退出該腳本進(jìn)程,并觸發(fā)新的腳本進(jìn)程運(yùn)行;當(dāng)其中任意一個(gè)腳本進(jìn)程的計(jì)時(shí)時(shí)長(zhǎng)未達(dá)到所述運(yùn)行時(shí)長(zhǎng)時(shí),判斷當(dāng)前用戶隊(duì)列中是否存在用戶數(shù)據(jù),若是,則對(duì)用戶數(shù)據(jù)進(jìn)行處理,若否,則待指定時(shí)長(zhǎng)后重新判斷。采用本發(fā)明能夠解決因操作系統(tǒng)或守護(hù)進(jìn)程中斷導(dǎo)致的網(wǎng)絡(luò)應(yīng)用服務(wù)中斷的技術(shù)問題。
文檔編號(hào)G06F9/48GK102999388SQ201210447958
公開日2013年3月27日 申請(qǐng)日期2012年11月9日 優(yōu)先權(quán)日2012年11月9日
發(fā)明者王博, 吳凱 申請(qǐng)人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司