新聞中心
linux信號(hào)舉例:掌握常用信號(hào)及其應(yīng)用!

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括邱縣網(wǎng)站建設(shè)、邱縣網(wǎng)站制作、邱縣網(wǎng)頁(yè)制作以及邱縣網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,邱縣網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到邱縣省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!
作為一個(gè)長(zhǎng)期存在于計(jì)算機(jī)操作系統(tǒng)中的重要組成部分,信號(hào)是指軟件中某個(gè)特定事件的通知,可以被發(fā)送給進(jìn)程或者線程,并由其作出相應(yīng)的處理。在現(xiàn)代操作系統(tǒng)中,信號(hào)的應(yīng)用十分廣泛,Linux系統(tǒng)也不例外。下面將重點(diǎn)介紹Linux信號(hào)的功能、種類及其應(yīng)用舉例。
一、Linux信號(hào)的功能
Linux信號(hào)是操作系統(tǒng)在進(jìn)程間通信時(shí)借助的一種輕量級(jí)的通信機(jī)制。通過(guò)傳遞信號(hào),可以實(shí)現(xiàn)多個(gè)進(jìn)程之間的互動(dòng)和信息交流。而Linux系統(tǒng)的信號(hào)機(jī)制可以在操作系統(tǒng)中采用異步方式進(jìn)行處理,保證進(jìn)程間的調(diào)度。
常見的Linux信號(hào)有30左右,其中重要的信號(hào)比較多。在信號(hào)機(jī)制中,進(jìn)程可以發(fā)送信號(hào),也可以接收信號(hào)。
二、Linux信號(hào)的種類
1.SIGHUP信號(hào)
SIGHUP信號(hào)是表示工作控制終端丟失的信號(hào),一般會(huì)在縮寫為HUP的情況下出現(xiàn)。
2.SIGINT信號(hào)
SIGINT信號(hào)是因?yàn)楫?dāng)程序由于從終端接收CTRL+C信號(hào)而終止時(shí),這種情況下出現(xiàn)的信號(hào),縮寫為INT。
3.SIGQUIT信號(hào)
SIGQUIT表示退出程序的信號(hào),一般是在CTRL+\情況下發(fā)生。
4.SIGKILL信號(hào)
SIGKILL表示強(qiáng)制終止進(jìn)程的信號(hào),不會(huì)忽略進(jìn)程的處理函數(shù),也稱為kill命令的強(qiáng)制類型。
5.SIGABRT信號(hào)
SIGABRT是由標(biāo)準(zhǔn)C庫(kù)的abort()函數(shù)發(fā)送的終止線程或進(jìn)程錯(cuò)誤信號(hào),縮寫為ABRT。
6.SIGALRM信號(hào)
SIGALRM是由定時(shí)器到達(dá)時(shí)間而被發(fā)送的信號(hào),縮寫為ALRM。
7.SIGCONT信號(hào)
SIGCONT是被暫停的進(jìn)程恢復(fù)執(zhí)行的信號(hào),縮寫為CONT。
8.SIGCHLD信號(hào)
SIGCHLD是由父進(jìn)程等待子進(jìn)程或子進(jìn)程終止而被發(fā)送的信號(hào),縮寫為CHLD。
9.SIGSTOP信號(hào)
SIGSTOP表示暫停進(jìn)程的信號(hào),該進(jìn)程可以被繼續(xù)執(zhí)行,但是不能修改或比較其狀態(tài),縮寫為STOP。
10.SIGUSR1和SIGUSR2信號(hào)
SIGUSR1和SIGUSR2是由用戶定義的信號(hào),用作進(jìn)程間通信的其它形式,縮寫為USR1和USR2。
三、Linux信號(hào)的應(yīng)用舉例
1.kill命令
我們可以使用kill命令發(fā)送信號(hào)來(lái)終止進(jìn)程。在Linux系統(tǒng)中,可以使用兩種方式發(fā)送信號(hào),其中之一種方式是通過(guò)進(jìn)程ID(PID),第二種方式是通過(guò)名稱。如下:
殺死格式為PID的進(jìn)程:
kill -信號(hào)值 進(jìn)程PID
例如,殺死進(jìn)程ID為5555的進(jìn)程,使用如下命令:
kill -SIGTERM 5555
殺死所有同名進(jìn)程:
kill -signal (進(jìn)程名稱)
例如,殺死所有名為“nginx”的進(jìn)程,使用如下命令:
killall -SIGKILL nginx
2.fork函數(shù)
Linux系統(tǒng)中,fork()函數(shù)可以創(chuàng)建新的進(jìn)程,并在該子進(jìn)程的進(jìn)程空間中對(duì)其運(yùn)行進(jìn)程狀態(tài)的保存。代碼如下:
pid_t pid = fork ();
if (pid > 0) {
/* Parent process, child id is pid */
} else if (pid == 0) {
/* Child process, do something */
} else {
/* Error, fled to create child process */
}
這里的fork函數(shù)創(chuàng)建一個(gè)新的進(jìn)程,并返回一個(gè)pid值。如果返回值大于0,則表示此為父進(jìn)程,并提供子進(jìn)程的pid。如果返回值為0,則表示當(dāng)前進(jìn)程為子進(jìn)程。如果fork函數(shù)失敗,則返回值為-1,此時(shí)應(yīng)處理錯(cuò)誤。
3.wtpid函數(shù)
可以等待指定PID的子進(jìn)程終止,并獲取子進(jìn)程的狀態(tài)碼,其中WIFEXITED和WEXITSTATUS函數(shù)是最常用的兩個(gè)函數(shù)。代碼如下:
pid_t pid, childpid;
int status;
while (1) {
/* Wting for child processes to complete */
childpid = wtpid (pid, &status, WUNTRACED | WCONTINUED);
if (childpid == -1) {
break;
}
if (WIFEXITED (status)) {
printf (“Process %u exited with status %d\n”,
(unsigned int) childpid, WEXITSTATUS (status));
} else if (WIFSIGNALED (status)) {
printf (“Process %d was interrupted with signal %d\n”,
childpid, WTERMSIG (status));
} else if (WIFSTOPPED (status)) {
printf (“Process %d was stopped with signal %d\n”,
childpid, WSTOPSIG (status));
} else if (WIFCONTINUED (status)) {
printf (“Process %d was resumed\n”, childpid);
}
}
這里的wtpid函數(shù)等待指定PID的子進(jìn)程終止,并通過(guò)status參數(shù)獲取子進(jìn)程終止?fàn)顟B(tài),而WIFEXITED和WEXITSTATUS函數(shù)則用來(lái)獲取進(jìn)程的終止?fàn)顟B(tài)。
4.signal函數(shù)
signal函數(shù)用來(lái)設(shè)置指定信號(hào)處理函數(shù),如下:
void (*signal (int signo, void (*func)(int)))(int);
其中,參數(shù)signo表示要設(shè)置的信號(hào)值;參數(shù)func表示要處理的函數(shù)。例如:
void handle_signal (int signo) {
if (signo == SIGHUP) {
printf (“Hangup received…\n”);
}
}
signal (SIGHUP, handle_signal);
這里的信號(hào)值是SIGHUP,而函數(shù)的名稱是handle_signal。在函數(shù)處理過(guò)程中,當(dāng)信號(hào)值等于SIGHUP時(shí),將打印消息。
正如我們所見,Linux信號(hào)在系統(tǒng)操作和進(jìn)程通信中發(fā)揮著非常重要的作用。工具和技術(shù)可以獨(dú)立處理信號(hào),但是了解和掌握不同類型的Linux信號(hào),并在實(shí)踐中正確地應(yīng)用它們可以在系統(tǒng)調(diào)試和開發(fā)等方面更加輕松高效,提高了工作效率。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220關(guān)于linux下的信號(hào)的問(wèn)題
每個(gè)進(jìn)程都有一個(gè)阻塞位圖和一個(gè)信號(hào)位圖,當(dāng)檢查信號(hào)時(shí),會(huì)把阻塞位圖取反與上信號(hào)位圖。系統(tǒng)發(fā)晌咐閉送信號(hào)時(shí)只改變信號(hào)位圖,設(shè)置信號(hào)阻塞狀態(tài)只改變阻塞位圖,他們其實(shí)沒得好大關(guān)系,只宴裂是在信號(hào)檢查時(shí),一旦該信號(hào)被阻塞,這個(gè)信號(hào)就相簡(jiǎn)并當(dāng)于不存在,不執(zhí)行任何操作。
信號(hào)判搜是否阻塞,只是信號(hào)mask的狀態(tài),決定對(duì)將來(lái)收到信號(hào)的處理方式。
無(wú)論你是否給他信號(hào),這個(gè)狀態(tài)都已經(jīng)設(shè)定。
這個(gè)代碼先block SIGINT, 然掘毀歷后sleep 10秒等待信號(hào). 10秒后,檢查10秒內(nèi)余嘩是否輸入了SIGINT信號(hào).(如果輸入了,會(huì)被block, handler不會(huì)被調(diào)用, sleep會(huì)被中斷.). 不管如何,隨后立即解除對(duì)SIGINT的block. 最后,進(jìn)入死循環(huán),這時(shí)如果ctrl+C, 會(huì)發(fā)現(xiàn) handler能被調(diào)用.
看不懂。。。。。。。。。頂。。
linux信號(hào)舉例的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于linux信號(hào)舉例,Linux信號(hào)舉例:掌握常用信號(hào)及其應(yīng)用!,關(guān)于linux下的信號(hào)的問(wèn)題的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計(jì),成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營(yíng)銷讓企業(yè)網(wǎng)站產(chǎn)生價(jià)值。
本文題目:Linux信號(hào)舉例:掌握常用信號(hào)及其應(yīng)用!(linux信號(hào)舉例)
當(dāng)前鏈接:http://fisionsoft.com.cn/article/ccddoos.html


咨詢
建站咨詢
