2 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
運(yùn)行無(wú)限循環(huán)并執(zhí)行一些重要功能的應(yīng)用程序
只要它具有“重要功能”,所討論的程序就具有從某處(例如,從文件或從網(wǎng)絡(luò)套接字)獲得新的輸入數(shù)據(jù)的方式。因此,您可以在輸入數(shù)據(jù)中添加一個(gè)特殊的令牌,其含義為“操作結(jié)束”。收到此類令牌后,程序?qū)⒅涝撽P(guān)閉自身了。這種性質(zhì)的最簡(jiǎn)單的標(biāo)記之一是常規(guī)文件或遠(yuǎn)程套接字關(guān)閉的文件結(jié)束。
我剛剛描述的方法很簡(jiǎn)單,就是所謂的“帶內(nèi)控制通道”。也就是說(shuō),您使用單個(gè)通道來(lái)饋送要處理的數(shù)據(jù)和要控制的命令(即使只有一個(gè)命令“停止”)也是如此。
替代方法是“帶外控制通道”,即在應(yīng)用程序之間傳遞命令的第二個(gè)通道。
問(wèn)題是,如果用戶在循環(huán)內(nèi)執(zhí)行某些操作時(shí)終止了該應(yīng)用程序,該怎么辦?這將導(dǎo)致狀態(tài)不一致。
您嘗試使用的方法kill
是使用被稱為進(jìn)程間信號(hào)的設(shè)施的一種可能性。為了正確使用它,接收程序必須注冊(cè)一個(gè)信號(hào)處理程序例程以自行啟動(dòng)關(guān)機(jī)。發(fā)送方應(yīng)使用匹配的信號(hào)編號(hào)。使用kill
(POSIX中的SIGKILL)不是最佳選擇,因?yàn)樗哂刑厥獾男袨椴⑶也荒芊峙溆凶远x信號(hào)處理程序。在POSIX中,最好使用SIGUSR1或許多其他信號(hào)之一。我不記得它的本機(jī)Windows等效項(xiàng)。
有多種機(jī)制可以組織常規(guī)操作系統(tǒng)中進(jìn)程之間的處理器間通信,請(qǐng)參閱Wikipedia到完整列表,其中包括從共享文件到命名管道和網(wǎng)絡(luò)套接字的所有內(nèi)容。選擇一種最適合您的需求。您只需要傳遞一點(diǎn)數(shù)據(jù),因此基本上最容易編程的數(shù)據(jù)就是最好的。
- 2 回答
- 0 關(guān)注
- 315 瀏覽
添加回答
舉報(bào)