kill命令到底是干嘛的?一般我们用到它的时候,都是为了kill掉一个运行中的程序.那么它仅仅就只会杀杀杀吗?
在linux操作系统中,我们可以通过man手册来查看帮助文档,其实kill的主要作用是向进程发送信号的,既然是发送信号,那就可以发送多种信号.那么信号到底是如何定义的.
信号:信号就是一个整数值,它代表是一种信息; 信号有用户定义的和linux自己预定义的,信号有可靠新号和不可靠信号.(不可靠信号可以被压缩)比如两个人约定好 ,我说1,你坐,我说2你跑.......,对于一个进程来说,收到什么样的信号产生什么样的行为,这都是预定义好的;既然是预定义好的,那么我们能改变程序收到信号后的处理方式吗,我们可以收到之后不处理吗?或者说我们干脆屏蔽该信号,都可以吗?这些都可以通过编程来实现的;
linux到底有哪些信号呢,可以通过kill -l来查看信号:
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP
6) 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
1,信号的种类
信号的种类有两种: 可靠信号和不可靠信号,不可靠信号可以被压缩,比如有时候执行多个同一操作的时候,系统仅仅执行了一次;
01-31信号:会被系统压缩/合并 ; 34-64信号:不会被系统压缩/合并
2,如何发送信号
kill -s 信号 进程ID
信号就是一个整数,也可以是宏或者一个简单的宏的缩写;如 2 ; SIGINT;INT,也可以是硬件发处信号 如 ctrl+c
3,如何处理信号
信号的处理其实就是中断;如果程序注册了该信号,则当进程收到信号时,会暂停进程的执行,执行信号的处理,当信号处理完之后,进程接着继续执行;
使用signal注册信号和信号的处理函数;
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
void handle(int s)
{
printf("收到Signal=%d!\n",s);
}
int main()
{
signal(2,handle);
printf("pid=%d\n",getpid());
while(1);
}
4,如何屏蔽信号
一般情况下,ctrl+c 可以终止一个前台进程,那进程如何屏蔽该信号;以下使用
5,系统对信号的默认处理方式
信号文档:
名称 默认动作 说明
SIGHUP 终止进程 终端线路挂断
SIGINT 终止进程 中断进程
SIGQUIT 建立CORE文件 终止进程,并且生成core文件
SIGILL 建立CORE文件 非法指令
SIGTRAP 建立CORE文件 跟踪自陷
SIGBUS 建立CORE文件 总线错误
SIGSEGV 建立CORE文件 段非法错误
SIGFPE 建立CORE文件 浮点异常
SIGIOT 建立CORE文件 执行I/O自陷
SIGKILL 终止进程 杀死进程
SIGPIPE 终止进程 向一个没有读进程的管道写数据
SIGALARM 终止进程 计时器到时
SIGTERM 终止进程 软件终止信号
SIGSTOP 停止进程 非终端来的停止信号
SIGTSTP 停止进程 终端来的停止信号
SIGCONT 忽略信号 继续执行一个停止的进程
SIGURG 忽略信号 I/O紧急信号
SIGIO 忽略信号 描述符上可以进行I/O
SIGCHLD 忽略信号 当子进程停止或退出时通知父进程
SIGTTOU 停止进程 后台进程写终端
SIGTTIN 停止进程 后台进程读终端
SIGXGPU 终止进程 CPU时限超时
SIGXFSZ 终止进程 文件长度过长
SIGWINCH 忽略信号 窗口大小发生变化
SIGPROF 终止进程 统计分布图用计时器到时
SIGUSR1 终止进程 用户定义信号1
SIGUSR2 终止进程 用户定义信号2
SIGVTALRM 终止进程 虚拟计时器到时