日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux的基础知识——信号的四要素和kill

發布時間:2024/7/19 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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) SIGRTMAX

3.信號的默認動作

動作意義
Term終止進程
lgn忽略信號
Core終止進程,生成core文件
Stop停止(暫停)進程
Cont繼續運行進程

\qquad對于信號的處理,有執行默認動作,忽略和捕捉,其中 9)SIGKILL和 19)SIGSTOP,不允許捕捉和忽略,只能執行默認動作。

4.信號的產生

4.1 終端按鍵產生信號
按鍵操作信號說明
ctrl + c2:SIGINT(終止/中斷)INT:interrupt
ctrl + z20: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函數,自己把自己殺死

#include<stdio.h> #include<unistd.h> #include<stdlib.h> #include<signal.h>int main() {int ret = kill(getpid(),SIGKILL);if(ret==-1){perror("kill error!");exit(1);}return 0; }

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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。