kill 命令到底是干嘛的

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       终止进程        虚拟计时器到时




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值