linux的基础知识——信号的四要素和kill
生活随笔
收集整理的這篇文章主要介紹了
linux的基础知识——信号的四要素和kill
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.信號的四要素
\qquad信號的名字;信號的編號;信號的默認處理動作;信號的事件
2.信號相關命令
\qquad查看linux下的所有信號:kill -l;查看信號文檔:man 7 signal。一共有64個信號。linux常規信號一覽表
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.信號的默認動作
| Term | 終止進程 |
| lgn | 忽略信號 |
| Core | 終止進程,生成core文件 |
| Stop | 停止(暫停)進程 |
| Cont | 繼續運行進程 |
\qquad對于信號的處理,有執行默認動作,忽略和捕捉,其中 9)SIGKILL和 19)SIGSTOP,不允許捕捉和忽略,只能執行默認動作。
4.信號的產生
4.1 終端按鍵產生信號
| ctrl + c | 2:SIGINT(終止/中斷) | INT:interrupt |
| ctrl + z | 20:SIGTSTP(暫停/停止) | T:terminal STP:stop |
| ctrl + \ | 3:SIGQUIT(退出) |
4.2 硬件異常產生信號
| 除0操作 | 8:SIGFPE |
| 非法訪問內存 | 11:SIGSEGV(段錯誤) |
| 總線錯誤 | 7:SIGBUS |
4.3 kill函數或者kill命令產生信號
4.3.1 kill命令產生信號
kill -9 10624 // 給進程10624發送9)SIGKILL信號4.3.2 kill函數
\qquadint kill(pid_t pid,int sig)
\qquad功能:給指定進程發送指定信號(不一定殺死)
\qquad返回值:成功返回0;失敗返回-1
\qquad參數:第一個參數:pid>0,發送信號給指定進程;pid=0,發送信號給與調用kill函數進程屬于同一進程組的所有進程;pid<0,取|pid|發送給對應進程組;pid=-1,發送給進程有權發送的系統中的所有進程。 第二個參數:sig不推薦使用數字,建議使用宏名
\qquad舉例:調用kill函數,自己把自己殺死
5.舉例
\qquad創建5個子進程,然后依次殺死
#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; }總結
以上是生活随笔為你收集整理的linux的基础知识——信号的四要素和kill的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统——内存
- 下一篇: 计算机网络——物理层传输介质