欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

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

发布时间:2024/7/19 linux 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。