linux的基础知识——信号的四要素和kill
1.信號(hào)的四要素
\qquad信號(hào)的名字;信號(hào)的編號(hào);信號(hào)的默認(rèn)處理動(dòng)作;信號(hào)的事件
2.信號(hào)相關(guān)命令
\qquad查看linux下的所有信號(hào):kill -l;查看信號(hào)文檔:man 7 signal。一共有64個(gè)信號(hào)。linux常規(guī)信號(hào)一覽表
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX3.信號(hào)的默認(rèn)動(dòng)作
| Term | 終止進(jìn)程 |
| lgn | 忽略信號(hào) |
| Core | 終止進(jìn)程,生成core文件 |
| Stop | 停止(暫停)進(jìn)程 |
| Cont | 繼續(xù)運(yùn)行進(jìn)程 |
\qquad對(duì)于信號(hào)的處理,有執(zhí)行默認(rèn)動(dòng)作,忽略和捕捉,其中 9)SIGKILL和 19)SIGSTOP,不允許捕捉和忽略,只能執(zhí)行默認(rèn)動(dòng)作。
4.信號(hào)的產(chǎn)生
4.1 終端按鍵產(chǎn)生信號(hào)
| ctrl + c | 2:SIGINT(終止/中斷) | INT:interrupt |
| ctrl + z | 20:SIGTSTP(暫停/停止) | T:terminal STP:stop |
| ctrl + \ | 3:SIGQUIT(退出) |
4.2 硬件異常產(chǎn)生信號(hào)
| 除0操作 | 8:SIGFPE |
| 非法訪問(wèn)內(nèi)存 | 11:SIGSEGV(段錯(cuò)誤) |
| 總線錯(cuò)誤 | 7:SIGBUS |
4.3 kill函數(shù)或者kill命令產(chǎn)生信號(hào)
4.3.1 kill命令產(chǎn)生信號(hào)
kill -9 10624 // 給進(jìn)程10624發(fā)送9)SIGKILL信號(hào)4.3.2 kill函數(shù)
\qquadint kill(pid_t pid,int sig)
\qquad功能:給指定進(jìn)程發(fā)送指定信號(hào)(不一定殺死)
\qquad返回值:成功返回0;失敗返回-1
\qquad參數(shù):第一個(gè)參數(shù):pid>0,發(fā)送信號(hào)給指定進(jìn)程;pid=0,發(fā)送信號(hào)給與調(diào)用kill函數(shù)進(jìn)程屬于同一進(jìn)程組的所有進(jìn)程;pid<0,取|pid|發(fā)送給對(duì)應(yīng)進(jìn)程組;pid=-1,發(fā)送給進(jìn)程有權(quán)發(fā)送的系統(tǒng)中的所有進(jìn)程。 第二個(gè)參數(shù):sig不推薦使用數(shù)字,建議使用宏名
\qquad舉例:調(diào)用kill函數(shù),自己把自己殺死
5.舉例
\qquad創(chuàng)建5個(gè)子進(jìn)程,然后依次殺死
#include<stdio.h> #include <sys/types.h> #include <unistd.h> #include<errno.h> #include<stdlib.h> #include <sys/types.h> #include <signal.h>int main() {pid_t pid,q[5];int i;for(i=0;i<5;i++){pid = fork();if(pid==-1){perror("fork error!");exit(1);}else if(pid==0){break;}q[i]=pid;}if(i<5){while(1){printf("i am child %d,getpid()=%d\n",i,getpid());sleep(1);}}else{for(i=0;i<5;i++){sleep(2);kill(q[i],SIGKILL);}}return 0; }總結(jié)
以上是生活随笔為你收集整理的linux的基础知识——信号的四要素和kill的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 操作系统——内存
- 下一篇: 计算机网络——物理层传输介质