前言
慢系統(tǒng)調(diào)用,指的是可能永遠(yuǎn)無法返回,從而使進(jìn)程永遠(yuǎn)阻塞的系統(tǒng)調(diào)用,比如無客戶連接時(shí)的accept、無輸入時(shí)的read都屬于慢速系統(tǒng)調(diào)用。
在Linux中,當(dāng)阻塞于某個(gè)慢系統(tǒng)調(diào)用的進(jìn)程捕獲一個(gè)信號,則該系統(tǒng)調(diào)用就會被中斷,轉(zhuǎn)而執(zhí)行信號處理函數(shù),這就是被中斷的系統(tǒng)調(diào)用。
然而,當(dāng)信號處理函數(shù)返回時(shí),有可能發(fā)生以下的情況:
下面我們編寫代碼,分別驗(yàn)證上述幾種情形,其中系統(tǒng)調(diào)用選擇read,中斷信號選擇SIGALRM,中斷信號由alarm產(chǎn)生。
使用signal
#include <stdio.h> #include <signal.h> #include <unistd.h> #include <errno.h> void handler(int s) { printf("read is interrupt by signal handler\n"); return; } int main() { char buf[10]; int nread = 0; signal(SIGALRM, handler); alarm(2); printf("read start\n"); nread = read(STDIN_FILENO, buf, sizeof(buf)); printf("read return\n"); if ((nread < 0) && (errno == EINTR)) { printf("read return failed, errno is EINTR\n"); } return 0; }
當(dāng)前標(biāo)題:Linux被中斷的系統(tǒng)如何調(diào)用詳解-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://chinadenli.net/article6/dejpig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、網(wǎng)頁設(shè)計(jì)公司、標(biāo)簽優(yōu)化、網(wǎng)站策劃、電子商務(wù)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容