锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1. 紼嬪簭閿欒錛氶櫎闆訛紝闈炴硶鍐呭瓨璁塊棶…
2. 澶栭儴淇″彿錛氱粓绔?/span>Ctrl-C浜х敓SGINT淇″彿錛屽畾鏃跺櫒鍒版湡浜х敓SIGALRM…
3. 鏄劇ず璇鋒眰錛?/span>kill鍑芥暟鍏佽榪涚▼鍙戦佷換浣曚俊鍙風(fēng)粰鍏朵粬榪涚▼鎴栬繘紼嬬粍銆?/span>
淇″彿鐢熸垚鏃㈠彲浠ユ槸鍚屾鐨勶紙淇″彿涓庣▼搴忎腑鐨勬煇涓叿浣撴搷浣滅浉鍏沖茍鍦ㄩ偅涓搷浣滃悓鏃朵駭鐢燂級錛屼篃鍙互鏄紓姝ョ殑銆傞氬父紼嬪簭閿欒鐢熸垚淇″彿涓哄悓姝ョ殑錛岃繘紼嬫樉寮忚姹傜粰鑷繁鐨勪俊鍙蜂篃鏄悓姝ョ殑銆?/span>
澶栭儴浜嬩歡鎬繪槸寮傛鐨勶紝鏉ヨ嚜鍏朵粬榪涚▼鐨勬樉紺鴻姹備篃鏄紓姝ョ殑銆?/span>
淇″彿鍙戠敓鏃訛紝鎴戜滑鍙互鍛婅瘔unix鍐呮牳閲囧彇涓嬮潰涓夌鍔ㄤ綔涓殑浠諱竴縐嶏細(xì)
1. 蹇界暐淇″彿錛氬ぇ閮ㄥ垎淇″彿鍙蹇界暐錛岄櫎SIGSTOP鍜?/span>SIGKILL淇″彿澶栵紙榪欐槸瓚呯駭鐢ㄦ埛鏉鎺夋垨鍋滄帀浠繪剰榪涚▼鐨勬墜孌碉級銆?/span>
2. 鎹曡幏淇″彿錛氭敞鍐屼俊鍙峰鐞嗗嚱鏁幫紝瀹冨浜х敓鐨勭壒瀹氫俊鍙峰仛澶勭悊銆?/span>
3. 璁╀俊鍙烽粯璁ゅ姩浣滆搗浣滅敤錛?/span>unix鍐呮牳瀹氫箟鐨勯粯璁ゅ姩浣滐紝鏈?/span>5縐嶆儏鍐碉細(xì)
a) 嫻佷駭abort錛氱粓姝㈣繘紼嬪茍浜х敓core鏂囦歡銆?/span>
b) 緇堟stop錛氱粓姝㈣繘紼嬩絾涓嶇敓鎴?/span>core鏂囦歡銆?/span>
c) 蹇界暐錛氬拷鐣ヤ俊鍙楓?/span>
d) 鎸傝搗suspend錛氭寕璧瘋繘紼嬨?/span>
e) 緇х畫continue錛氳嫢榪涚▼鏄寕璧風(fēng)殑錛屽垯resume榪涚▼錛屽惁鍒欏拷鐣ユ淇″彿銆?/span>
浠繪剰鏃跺埢錛岃繘紼嬪彲浠ヤ負(fù)淇″彿鎸囧畾鍔ㄤ綔銆?/span>
淇″彿澶勭悊娑夊強涓や釜榪囩▼錛岀敓鎴愪笌浜や粯銆?/span>
淇″彿鐢熸垚鍑虹幇鍦ㄤ簨浠跺彂鐢熸椂錛屾鏃跺唴鏍告鏌ユ帴鏀惰繘紼嬬殑鐩稿叧鏁版嵁緇撴瀯錛屾緇撴瀯涓褰曚簡淇″彿鐨勫竷灞錛屾?zhèn)寕淇″彿闆嗗拰澶勭悊鍔ㄤ綔銆傚鏋滀俊鍙鋒槸瑕佽蹇界暐鐨勶紝鍐呮牳涓嶅仛浠諱綍鍔ㄤ綔灝辮繑鍥炪傚惁鍒欙紝灝嗘淇″彿鍔犲叆鎮(zhèn)寕淇″彿闆嗗悎涓傦紙鎮(zhèn)寕淇″彿闆嗗悎閫氬父鐢ㄤ綅涓茶〃紺猴紝姣忎綅瀵瑰簲涓涓俊鍙鳳紝鍐呮牳鏃犳硶璁板綍鍚屼竴淇″彿鐨勫涓疄渚嬶級銆?/span>
濡傛灉榪涚▼澶勪簬鍙腑鏂殑鐫$湢鐘舵侊紝騫朵笖璇ヤ俊鍙烽潪闃誨錛屽唴鏍稿敜閱掕繘紼嬨傝鍞ら啋榪涚▼涓鏃﹁繍琛屽垯鍦ㄨ繑鍥炵敤鎴鋒佸墠浼樺厛澶勭悊鎮(zhèn)寕淇″彿錛屽綋鏈夋?zhèn)寕淇″彿迤堜笖闈為樥d鏃訛紝鍐呮牳鏌ョ湅鏄惁鏈夊鐞嗗彞鏌勶紝濡傛灉娌℃湁娉ㄥ唽鍙ユ焺錛屽垯閲囧彇榛樿鍔ㄤ綔錛堥氬父涓虹粓姝㈣繘紼嬶級銆傚鏋滄湁鍙ユ焺錛屽垯灝嗘淇″彿鍔犲叆闃誨淇″彿灞忚斀涓?/span>
鏈鍚庡唴鏍稿畨鎺掕繘紼嬭繑鍥炲埌鐢ㄦ埛鎬佸茍鎵ц淇″彿鍙ユ焺錛屽悓鏃朵繚璇佸彞鏌勬墽琛屽畬鏃訛紝榪涚▼浠庤涓柇澶勪唬鐮佹墽琛屻?/span>
鐢卞紓姝ヤ簨浠朵駭鐢熺殑淇″彿鍙兘鍦ㄤ換涓鏉℃寚浠ゅ悗鍙戠敓錛屽綋淇″彿鍙ユ焺瀹屾垚鏃訛紝榪涚▼浠庝腑鏂箣澶勮搗鎵ц銆傚鏋滀俊鍙鋒槸鍦ㄨ繘紼嬪浜庣郴緇熻皟鐢ㄦ湡闂村埌杈劇殑錛屽唴鏍擱氬父abort姝ょ郴緇熻皟鐢ㄥ茍榪斿洖閿欒鐮?/span>EINTR銆?/span>
榪涚▼鍙互鏈夐夋嫨鐨勯樆濉炰俊鍙蜂氦浠橈紝褰撲竴涓闃誨鐨勪俊鍙風(fēng)敓鎴愭椂錛屽鏋滆繘紼嬫寚瀹氱殑鍔ㄤ綔涓洪粯璁ゆ垨鑰呮崟鑾鳳紝鍒欐淇″彿涓鐩存?zhèn)寕浜庤杩浗E嬬洿鍒板姝や俊鍙風(fēng)殑闃誨鏀懼紑錛屾垨鑰呬俊鍙峰姩浣滄敼涓哄拷鐣ャ?/span> 緋葷粺瀵歸樆濉炰俊鍙風(fēng)殑鍒ゅ畾鏄湪淇″彿浜や粯鏃惰岄潪鐢熸垚鏃訛紝榪欐牱鍙互鍏佽榪涚▼鍦ㄤ俊鍙瘋浜や粯鍓嶆敼鍙樹俊鍙峰姩浣溿?/span>
姣忎釜榪涚▼鏈変竴涓樆濉炰俊鍙峰睆钄斤紝瀹冨畾涔夊綋鍓嶈闃誨浜や粯鐨勯偅浜涗俊鍙楓傚彲璁や負(fù)瀹冩槸涓涓綅涓詫紝姣忎綅瀵瑰簲涓涓俊鍙楓傚鏋滄煇淇″彿瀵瑰簲鐨勪綅琚緗紝鍒欒淇″彿褰撳墠闃誨錛岃繘紼嬪彲璋冪敤
sigprocmask鍑芥暟鏉ユ鏌ユ垨璁劇疆灞忚斀銆?/span>
紼嬪簭閿欒綾諱俊鍙鳳細(xì)榛樿鍔ㄤ綔浣胯繘紼嬫祦浜э紝浜х敓core鏂囦歡銆?/span>
SIGABRT錛?/span> 璋冪敤abort鍑芥暟鐢熸垚鐨勪俊鍙楓?/span>
SIGFPE錛?/span> 嫻偣璁$畻閿欒銆?/span>
SIGILL錛?/span> 闈炴硶鎸囦護(hù)閿欒銆?/span>
SIGBUS/SIGSEGV錛?/span> 紜歡閿欒-闈炴硶鍦板潃璁塊棶銆?/span>
SIGEMT錛?/span> 紜歡閿欒
SIGSYS: 闈炴硶緋葷粺璋冪敤銆?/span>
SIGTRAP錛?/span> 紜歡閿欒錛堥氬父涓烘柇鐐規(guī)寚浠わ級銆?/span>
紼嬪簭緇堟綾諱俊鍙鳳細(xì)榛樿鍔ㄤ綔浣胯繘紼嬬粓姝紝鎴戜滑閫氬父瑕佸鐞嗚繖綾諱俊鍙鳳紝鍋氫竴浜涙竻鐞嗗伐浣滐紝鍙ユ焺鍑芥暟搴斿湪緇撴潫鏃朵負(fù)姝や俊鍙鋒寚瀹氶粯璁ゅ姩浣滐紝鐒跺悗鍐嶆鐢熸垚璇ヤ俊鍙鳳紝浣垮緱紼嬪簭緇堟銆?/span>
SIGHUP錛氱粓绔柇寮榪炴帴鏃訛紝鐢熸垚姝や俊鍙風(fēng)粰鎺у埗榪涚▼銆?/span>
SIGINT錛?/span>Ctrl-C鎴?/span>Delete鎸変笅鏃訛紝鐢辯粓绔┍鍔ㄧ敓鎴愶紝騫跺彂閫佺粰鍓嶅彴榪涚▼緇勪腑鐨勬墍鏈夎繘紼嬨?/span>
SIGKILL錛氫嬌紼嬪簭绔嬪嵆緇堟錛屼笉鑳借鎹曡幏鎴栧拷鐣ワ紝涔熶笉鑳借闃誨銆?/span>
SIGQUIT錛?/span>Ctrl-\,濡?/span>SIGINT錛屽茍涓斾駭鐢?/span>core銆?/span>
SIGTERM錛氳淇″彿浣跨▼搴忕粓姝紝浣嗘槸鍙互闃誨銆佹崟鑾楓佸拷鐣ャ?/span>
闂歸挓綾諱俊鍙鳳細(xì)閫氱煡瀹氭椂鍣ㄥ埌鏈燂紝榛樿鍔ㄤ綔鏄粓姝㈢▼搴忥紝浣嗛氬父浼?xì)璁揪|彞鏌勩?/span>
SIGALRM錛?/span>alarm/setitimer鍑芥暟璁劇疆瀹氭椂鍒版湡鍚庯紝浼?xì)漶旂敓姝や俊鍙枫?/span>
SIGPROF錛?/span>
SIGVTALRM錛?/span>
I/O綾諱俊鍙鳳細(xì)閫氱煡榪涚▼鍦ㄦ弿榪板瓧涓婂彂鐢熶簡鎰熷叴瓚d簨浠訛紝鏀寔淇″彿椹卞姩IO銆?/span>
SIGIO錛?/span> fd鍑嗗鎵ц杈撳叆杈撳嚭鏃跺彂閫佹淇″彿銆?/span>
SIGPOLL錛氬紓姝?/span>I/O淇″彿銆?/span>
SIGURG錛氱綉緇滄敹鍒板甫澶栨暟鎹椂鍙夋嫨鐢熸垚姝や俊鍙楓?/span>
浣滀笟鎺у埗綾諱俊鍙鳳細(xì)
SIGCHLD錛?/span> 榪涚▼緇堟鎴栧仠姝㈡椂浼?xì)鍚戝叾鐖稑q涚▼鍙戦佽淇″彿錛岄粯璁ゅ姩浣滀負(fù)蹇界暐銆?/span>
SIGCONT: 浣垮仠姝㈢殑榪涚▼鎭㈠榪愯銆?/span>
SIGSTOP: 鍋滄榪涚▼銆?/span>
SIGTSTP/SIGTTIN/SIGTTOU:
鎿嶄綔閿欒綾諱俊鍙鳳細(xì)榛樿鍔ㄤ綔緇堟紼嬪簭銆?/span>
SIGPIPE錛?/span> 綆¢亾鐮磋銆?/span>
SIGXCPU/SIGXFSZ錛?/span>
signal鍑芥暟錛?/span>
void (* signal(int sig, void (*func)(int)))(int);
sig鎸囨槑鏄摢涓縐嶄俊鍙楓?/span>
func鎸囨槑鍔ㄤ綔錛?/span>SIG_DFL錛?/span> SIG_IGN錛屾垨鑰呬俊鍙峰彞鏌勫湴鍧銆?/span>
褰撲俊鍙峰彂鐢熸椂錛屽鏋?/span>func鎸囧悜淇″彿鍙ユ焺錛岀郴緇熷湪灝嗘帶鍒惰漿寰鍙ユ焺鍓嶏紝鍏堝皢璇ヤ俊鍙峰姩浣滅疆涓?/span>DFL,鎴栬呴樆濉炶淇″彿鐩村埌鍙ユ焺瀹屾垚銆?/span>
Signal鍑芥暟榪斿洖鍊兼寚鍚戝墠涓嬈℃湁鏁堝姩浣滄寚閽堬細(xì)SIG_DFL,SIG_IGN,鎴栦俊鍙峰湴鍧錛岃繖鎻愪緵浜嗘仮澶嶄俊鍙峰姩浣滅殑鏈哄埗銆?/span> 濡傛灉signal璋冪敤鍑洪敊錛岃繑鍥?/span>SIG_ERR騫惰緗?/span>errno銆?/span>
榪涚▼鍒濆惎鏃剁殑淇″彿鍔ㄤ綔錛?/span>
fork:緇ф壙鐖惰繘紼嬬殑鍔ㄤ綔
exec:鎵鏈変俊鍙峰姩浣滆涔堟槸蹇界暐瑕佷箞鏄粯璁ゃ?/span>
涓嶅彲闈犱俊鍙鳳細(xì)
鏃╂湡鐗堟湰Unix涓嬌鐢?/span>signal錛屾瘡褰撲俊鍙蜂氦浠樻椂錛屽叾鍔ㄤ綔鎬繪槸鐢辯郴緇熼噸緗負(fù)榛樿鍔ㄤ綔錛屽洜姝や負(fù)浜嗕嬌淇″彿鍙ユ焺鎵ц鏈熼棿錛屼粛鑳藉鍚屼竴淇″彿鍚庣畫鍋氬弽搴旓紝闇瑕佸啀嬈¤皟鐢?/span>signal銆?/span>
Catch_Signal(){
// 濡傛灉絎簩嬈′俊鍙峰垰濂藉湪姝ゆ椂鍙戠敓錛屽皢瀵艱嚧榪涚▼緇堟core鎺夈?/span>
signal(SIGQUIT,Catch_Signal);
}
Main(){
signal(SIGQUIT, Catch_Signal);
…
}
浣跨敤signal鐨勫彟涓涓棶棰樻槸錛屽浜庝俊鍙鳳紝榪涚▼瑕佷箞蹇界暐錛岃涔堟崟鑾鳳紝鏃犳硶鍦ㄤ竴孌墊椂闂村唴闃誨淇″彿錛堟帹榪熶俊鍙風(fēng)殑浜や粯錛夛紝涓轟簡鍏嬫湇signal鍏煎鎬ч棶棰橈紝鐜頒唬unix鍧囧疄鐜頒簡POSIX瀹氫箟鐨?/span>sigaction鍑芥暟錛岃鍑芥暟閲囩敤涓涓?/span>sigaction緇撴瀯錛岄櫎瀹氫箟淇″彿浜や粯鏃惰閲囧彇鐨勫姩浣滃錛岃繕鍖呭惈鍏朵粬涓浜涘姩浣滄帶鍒朵俊鎭?/span>
sigaction榪樺厑璁歌皟鐢ㄨ繘紼嬫嫻嬫垨鎸囧畾涓庣壒瀹氫俊鍙風(fēng)浉鍏崇殑鍔ㄤ綔銆?/span>
int sigaction(int sig, const struct sigaction* act, struct sigaction* oact);
sig鎸囧畾淇″彿-闄?/span>SIGKILL鍜?/span>SIGSTOP銆?/span>
濡傛灉act涓?/span>NULL錛屽垯涓嶆敼鍙樹俊鍙峰姩浣滐紝鍙煡璇㈠綋鍓嶅姩浣溿?/span>
鎴愬姛榪斿洖0錛屽け璐ュ垯涓嶅畨瑁呮柊淇″彿鍔ㄤ綔錛岃繑鍥?/span>-1錛岃緗?/span>errno銆?/span>
struct sigaction{
void 錛?/span>*sa_handler錛?/span>(int); // 鍚?/span>signal鐨勭浜屽弬鏁?/span>func銆?/span>
void (*sa_sigaction)(int, siginfo_t*, void*); // 浠呭綋flags璁劇疆SA_SIGINFO璧蜂綔鐢ㄣ?/span>
sigset_t sa_mask; // 鎸囨槑淇″彿鎵ц鏈熼棿瑕侀樆濉炵殑涓緇勪俊鍙鳳紝闄ゆ涔嬪瀵艱嚧淇″彿鍙ユ焺鎵?/span>
琛岀殑淇″彿涔熻嚜鍔ㄩ樆濉烇紝闄ら潪鎸囧畾浜?/span>SA_NODEFER銆備俊鍙峰彞鏌勬甯歌繑鍥炴椂錛屽睆钄芥仮澶嶅埌鍘熷厛鐘舵併?/span>
int sa_flags; //
}錛?/span>
sa_flags鏄竴涓綅涓詫紝鍙互閫氳繃鎴栬繍綆楃敓鎴愩傚彲璁劇疆涓嬪垪鏍囧織錛?/span>
SA_NOCLDSTOP: 鍙CHLD淇″彿璧蜂綔鐢紝瀛愯繘紼嬫殏鍋滄椂涓嶅彂淇″彿緇欑埗榪涚▼銆?/span>
SA_RESTART: 淇″彿鍙ユ焺榪斿洖鏃訛紝鑷姩鎭㈠琚淇″彿涓柇鐨勭郴緇熻皟鐢ㄣ傚惁鍒欒緋葷粺璋冪敤灝嗕腑鏂繑鍥?/span>-1錛屽茍璁劇疆errno涓?/span>EINTR銆?/span>
SA_ONSTACK:
SA_RESETHAND錛氫俊鍙峰彞鏌勫叆鍙o紝緋葷粺灝嗛噸緗俊鍙峰姩浣滀負(fù)SIG_DFL.
SA_NODEFER:鍙ユ焺鎵ц鏈熼棿錛屼笉鑷姩闃誨璇ヤ俊鍙楓?/span>
SA_NOCLDWAIT:鍙CHLD璧蜂綔鐢紝璋冪敤榪涚▼鐨勬墍鏈夊瓙榪涚▼鍦ㄧ粓姝㈡椂涓嶄細(xì)鎴愪負(fù)Zombe銆傝繖縐嶆儏鍐典笅錛岀埗榪涚▼鏃犻渶瑕?/span>wait瀛愯繘紼嬶紝騫朵笖瀛愯繘紼嬬粓姝篃涓嶅悜鐖惰繘紼嬪彂SIGCHLD淇″彿銆?/span>
濡傛灉鐖惰繘紼嬭皟鐢?/span>wait錛屽皢闃誨鍒版墍鏈夊瓙榪涚▼緇堟錛屽茍榪斿洖-1錛?/span>errno璁句負(fù)ECHILD.
SA_SIGINFO:濡傛灉鏈緗鏍囧織錛屽垯淇″彿鍙ユ焺鍘熷瀷涓猴細(xì)
void func(int signo);
濡傛灉璁劇疆姝ゆ爣蹇楋紝鍒欏彞鏌勫師鍨嬩負(fù)錛?/span>
void func(int signo, singinfo_t* info, void* context);
Info- 瑙i噴淇″彿鐢熸垚鐨勫師鍥犮?/span>
Context-淇″彿琚氦浠樻椂鎵涓柇榪涚▼鐨勪笂涓嬫枃銆?/span>
涓鏃︾敤sigaction涓虹壒瀹氫俊鍙峰緩绔嬩簡鍔ㄤ綔錛岃鍔ㄤ綔灝變竴鐩翠繚鎸侊紝鐩村埌鍙︿竴嬈¤皟鐢?/span>sigaction錛屾垨鑰呰皟鐢?/span>exec錛屾垨鑰呭洜璁劇疆浜?/span>SA_RESETHAND瀵艱嚧緋葷粺鑷姩鏀瑰彉鍔ㄤ綔涓洪粯璁や負(fù)姝€?/span>
闄や簡澶栭儴涓柇浜х敓淇″彿澶栵紝紼嬪簭鍙互鏄懼紡鐨勮皟鐢?/span>raise鍑芥暟緇欎粬鑷繁鍙戦佷俊鍙鳳紝鎴栬皟鐢?/span>kill鍚戣嚜宸辨垨鍏朵粬榪涚▼鍙戦佷俊鍙楓?/span>
闃誨淇″彿鎰忓懗鐫淇濇寔璇ヤ俊鍙峰茍鎺ㄨ繜瀹冪殑浜や粯錛屽彲浠ラ槻姝㈢▼搴忎腑鐨勫叧閿唬鐮佽淇″彿涓柇銆?/span>
淇″彿闆嗘搷浣滐細(xì)
int sigemptyset(sigset_t* set); // 娓呯┖淇″彿闆?/span>
int sigfillset(sigset_t* set); // 鍖呭惈鎵鏈変俊鍙烽泦
sigaddset/sigdelset/sigismember;
sigprocmask鐢ㄦ潵媯嫻嬫垨鏀瑰彉璋冪敤榪涚▼鐨勪俊鍙峰睆钄姐?/span>
int sigprocmask(int how, const sigset_t* set, sigset_t* oset);
How: SIGBLOCK SIG_UNBLOCK SIG_SETMASK
濡傛灉璋冪敤sigprocmask鏀懼紑鏌愪釜淇″彿鑰屽鑷翠換浣曟?zhèn)寕淇″彲偄В闄ら樥d錛屽垯鍑芥暟榪斿洖鍓嶏紝榪欎簺淇″彿涓嚦灝戞湁涓涓浜や粯銆?/span>
媯鏌ユ?zhèn)寕淇″忴P細(xì)int sigpending(sigset_t* set);
絳夊緟淇″彿錛?/span>int pause(void);
鎮(zhèn)寕璋冪敤榪涚▼鐩村埌鏈変竴涓俊鍙峰埌杈俱備粎褰撳彞鏌勬墽琛屽茍榪斿洖鏃訛紝pause鍑芥暟鎵嶈繑鍥烇細(xì)姝ゆ椂榪斿洖-1錛屽茍璁劇疆errno涓?/span>EINTR銆傛墍鏈夊叾浠栨儏鍐典笅pause涓嶈繑鍥炪?/span>
濡傛灉澶氫釜鐩稿悓淇″彿鍦ㄤ俊鍙峰彞鏌勮繍琛屽墠鍙戠粰浜嗚繘紼嬶紝鍒欏彞鏌勫彧琚繍琛屼竴嬈°傛崲鍙ヨ瘽璇達(dá)紝榛樿鎯呭喌涓?/span>unix淇″彿鏄潪鎺掗槦鐨勶紝鍙湁褰撳疄鐜版敮鎸佸疄鏃朵俊鍙峰茍涓?/span>sa_flags璁劇疆SA_SIGINFO鏃訛紝鐢?/span>sigqueue鐢熸垚鐨勫悗緇俊鍙鋒墠鎺掗槦銆?/span>
I/O鎵ц鏈熼棿錛屾湁鍙兘鍒拌揪淇″彿錛屾鏃舵湁涓ょ鎯呭喌錛氶噸鏂板紑濮嬬郴緇熻皟鐢ㄨ繕鏄繑鍥炲け璐?/span>.
鏃╂湡unix鐗瑰緛涓猴紝榪涚▼鎵ц鎱㈢郴緇熻皟鐢ㄦ湡闂存崟鑾蜂俊鍙鋒椂錛岃璋冪敤琚腑鏂茍璁劇疆errno涓?/span>EINTR銆傜幇浠?/span>unix澧炲姞浜?/span>sa_flags閫夐」SA_RESTART鍙鍗曚釜淇″彿瑕佹眰鑷姩鎭㈠琚腑鏂殑緋葷粺璋冪敤銆?/span>
鍘熷垯濡備笅錛氬鏋滆繘紼嬮樆濉炰簬鎱㈢郴緇熻皟鐢紝騫朵笖榪涚▼鎹曡幏淇″彿涓旇淇″彿鍙ユ焺榪斿洖錛岀郴緇熻皟鐢ㄥ彲鑳借繑鍥?/span>EINTR銆?/span> 铏界劧鏈変簺unix鑳借嚜鍔ㄦ仮澶嶇郴緇熻皟鐢紝浣嗘槸涓轟簡鍏煎鎬э紝鎴戜滑蹇呴』鍑嗗鎱㈢郴緇熻皟鐢ㄨ繑鍥?/span>EINTR錛屽綋媯嫻嬪埌EINTR錛岃涔堥噸鏂板紑濮嬬郴緇熻皟鐢紝瑕佷箞鍋氬叾浠栧鐞嗐?/span>
Again錛?/span>
if (n=read(fd,buff, BUFSIZE) < 0) {
if (errno ==EINTR)
goto Again;
else
…}