POSIX 表示可移植操作系統(tǒng)接口,英文全稱為:Portable Operating System Interface ,IEEE最初開(kāi)發(fā)POSIX標(biāo)準(zhǔn),是為了提高UNIX環(huán)境下應(yīng)用程序的可移植性,但POSIX并不局限與UNIX,許多其他的操作系統(tǒng)都支持POSIX標(biāo)準(zhǔn)
看了幾天的Unix網(wǎng)絡(luò)編程中Posix信號(hào)處理這章內(nèi)容,了解了些關(guān)于signal的相關(guān)知識(shí),現(xiàn)在總結(jié)下:
首先,要知道什么是信號(hào),信號(hào)是事件發(fā)生時(shí)對(duì)進(jìn)程的通知,又可以稱為軟中斷;
其次,信號(hào)是如何產(chǎn)生的,書(shū)中描述有2種可能,一是進(jìn)程間的相互發(fā)送,二是由內(nèi)核產(chǎn)生并發(fā)送至進(jìn)程;
最后,信號(hào)如何捕獲和處理呢,下面具體說(shuō)明的
看了書(shū)中的代碼以及相關(guān)的說(shuō)明以后,我在網(wǎng)上查了下signal的相關(guān)處理函數(shù)以及signal.h的頭文件定義,可以利用索引查到相關(guān)的函數(shù)和頭文件說(shuō)明
這個(gè)網(wǎng)址是
http://www.opengroup.org/onlinepubs/009695399/ 網(wǎng)上的對(duì)關(guān)于signal的處理方法做了如下的說(shuō)明:
The signal() function chooses one of three ways in which receipt of the signal number sig is to be subsequently handled.
If the value of func is SIG_DFL, default handling for that signal shall occur.
If the value of func is SIG_IGN, the signal shall be ignored.
Otherwise, the application shall ensure that func points to a function to be called when that signal occurs.
上面一共描述了三種方法:
首先是可以設(shè)置默認(rèn)的信號(hào)處理方法(SIG_DFL),默認(rèn)的信號(hào)處理方法一般為接受到該信號(hào)時(shí)終止進(jìn)程,個(gè)別信號(hào)的缺省處理方法是忽略
signal(SIGCHLD,SIG_DFL) --將SIGCHLD信號(hào)的處理方法設(shè)置為缺省的處理方法
其次是可以設(shè)置忽略的信號(hào)處理方法(SIG_IGN),但是有2個(gè)信號(hào)是不可以忽略的
SIGKILL Kill(cannot be caught or ignored).
SIGSTOP Stop executing (cannot be caught or ignored). signal(SIGALRM,SIG_IGN) --將SIGALRM信號(hào)的處理方法設(shè)置為忽略的處理方法
最后是可以指定自定義的信號(hào)處理方法
簡(jiǎn)單的方法是用signal函數(shù),它的第一個(gè)參數(shù)是信號(hào)名,第二個(gè)參數(shù)是指向函數(shù)的指針或?yàn)槌V礢IG_DFL或SIG_IGN
但是,我們還可以利用sigaction自定義自己的信號(hào)處理函數(shù)
struct sigaction sa;
sa.sa_handler = 函數(shù)名;
sigemptyset(&sa.sa_mask);
sa.sa_flags = SA_RESTART;/* Restart functions if interrupted by handler */
if (sigaction(SIGINT, &sa, NULL) == -1)
/* Handle error */;
這就是signal的一些處理方法和步驟,但有時(shí)候我們并不用系統(tǒng)直接提供的signal函數(shù),而是利用sigaction自己構(gòu)造信號(hào)的特定處理方法
但是還有點(diǎn)迷惑的是就是對(duì)SA_RESTAR的定義不是很了解,還得多差點(diǎn)資料
上述的網(wǎng)站上是對(duì)SA_RESTART做下面的解釋的:
This flag affects the behavior of interruptible functions; that is, those specified to fail with errno set to [EINTR].
If set,and a function specified as interruptible is interrupted by this signal,the function shall restart and shall not fail with [EINTR] unless specified.
If the flag is not set, interruptible functions interrupted by this signal shall fail with errno set to [EINTR] 書(shū)中是這樣解釋的:如果設(shè)置,由此信號(hào)中斷的系統(tǒng)調(diào)用將由內(nèi)核自動(dòng)重啟
最后,還有一個(gè)名詞就是慢系統(tǒng)調(diào)用(slow system call),永遠(yuǎn)阻塞的系統(tǒng)調(diào)用是指調(diào)用可能永遠(yuǎn)無(wú)法返回,慢系統(tǒng)調(diào)用一般就是來(lái)描述可能永遠(yuǎn)阻塞的系統(tǒng)調(diào)用
比如:
1、如果沒(méi)有客戶機(jī)連接到服務(wù)器上,則服務(wù)器的accept的調(diào)用就沒(méi)有返回保證了
posted on 2007-09-03 09:12
LG 閱讀(1272)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
UnixProgram