嵌入式 - Linux下kill常用信号解释

      Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM信号。TERM信号将终止所有不能捕获该信号的进程。对于那些可以捕获该信号的进程就要用编号为9的kill信号,强行“杀掉”该进程。 

  • 常用信号量列表(命令:kill -l)

信号名称

信号状态

信号作用

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、SIGHUP  本信号在用户终端连接(正常或非正常)结束时发出,通常是在终端的控制进程结束时,通知同一session内的各个作业,这时它们与控制终端不再关联。

2、SIGINT  程序终止(interrupt)信号,在用户键入INTR字符(通常是Ctrl-C)时发出。

3、GQUIT   和SIGINT类似,但由QUIT字符(通常是Ctrl-)来控制。进程在因收到 SIGQUIT退出时会产生core文件,在这个意义上类似于一个程序错误信号。

4、SIGILL   执行了非法指令。通常是因为可执行文件本身出现错误,或者试图执行数据段。堆栈溢出时也有可能产生这个信号。

5、SIGTRAP  由断点指令或其它trap指令产生。由debugger使用。

6、SIGABRT  程序自己发现错误并调用abort时产生。

7、SIGIOT   在PDP-11上由iot指令产生, 在其它机器上和SIGABRT一样。

8、SIGBUS   非法地址, 包括内存地址对齐(alignment)出错。eg: 访问一个四个字长的整数, 但其地址不是4的倍数。

9、SIGFPE   在发生致命的算术运算错误时发出。不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术的错误。

10、SIGKILL   用来立即结束程序的运行。本信号不能被阻塞,处理和忽略。

11、SIGUSR1   留给用户使用

12、SIGSEGV   试图访问未分配给自己的内存,或试图往没有写权限的内存地址写数据。

13、SIGUSR2   留给用户使用

14、SIGPIPE   Broken pipe

15、SIGALRM   时钟定时信号,计算的是实际的时间或时钟时间。alarm函数使用该 信号。

16、SIGTERM   程序结束(terminate)信号,与SIGKILL不同的是该信号可以被阻塞和处理。通常用来要求程序自己正常退出。shell命令kill缺省产生这个信号。

17、SIGCHLD   子进程结束时,父进程会收到这个信号。

18、SIGCONT   让一个停止(stopped)的进程继续执行。本信号不能被阻塞。可以用一个handler来让程序在由stopped状态变为继续执行时完成特定的 工作。 例如,重新显示提示符。 

19、SIGSTOP   停止(stopped)进程的执行。注意它和terminate以及interrupt的区别:该进程还未结束,只是暂停执行。本信号不能被阻塞,处理或忽略。

20、SIGTSTP   停止进程的运行,但该信号可以被处理和忽略。用户键入SUSP字符时  (通常是Ctrl-Z)发出这个信号 

21、SIGTTIN   当后台作业要从用户终端读数据时,该作业中的所有进程会收到SIGTTIN 信号。缺省时这些进程会停止执行。

22、SIGTTOU   类似于SIGTTIN,但在写终端(或修改终端模式)时收到。

23、SIGURG   有"紧急"数据或out-of-band数据到达socket时产生。

24、SIGXCPU   超过CPU时间资源限制。这个限制可以由getrlimit/setrlimit来读取/ 改变 

25、SIGXFSZ   超过文件大小资源限制。

26、SIGVTALRM   虚拟时钟信号。类似于SIGALRM,但是计算的是该进程占用的CPU时间。

27、SIGPROF   类似于SIGALRM/SIGVTALRM,但包括该进程用的CPU时间以及系统调用的 时间。

28、SIGWINCH   窗口大小改变时发出。

29、SIGIO   文件描述符准备就绪,可以开始进行输入/输出操作。

30、SIGPWR   Power failure

 

       有两个信号可以停止进程: SIGTERM 和 SIGKILL。SIGTERM 比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号。对于SIGKILL信号,进程是不能忽略的。这是一个“我不管您在做什么,立刻停止”的信号。假如您发送SIGKILL信号给进程,Linux就将进程停止在那里。



猜你喜欢

转载自blog.csdn.net/u012313335/article/details/73458965