【Linux学习笔记】kill及kill -9的用法及如何实现进程的优雅退出

By admin in 计算机教程 on 2019年6月8日

Linux系统中的信号类型

【Linux学习笔记】kill及kill -9的用法及如何实现进程的优雅退出

各操作系统的信号定义或许有些不同。下面列出了POSIX中定义的信号。

 

在linux中使用34-64信号用作实时系统中。

  1. kill与signals

命令 man 7 signal 提供了官方的信号介绍。也可以是用kill -l来快速查看

        我们这里所说的kill是指作为shell
command的那个kill(相对地,linux系统中还有个叫做kill的system call, man 2
kill可查看其功能及用法),shell终端中输入man
kill可以看到,kill的作用是向某个指定的进程或进程组发送指定信号,从而结束该进程/进程组。-s选项可以指定要发送的具体信号,如果没有指定,则默认发送SIGTERM信号至指定进程/进程组,若进程没有捕获该信号的逻辑,则SIGTERM的作用是终止进程。
 

列表中,编号为1 ~
31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~
63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的区别在于前者不支持排队,可能会造成信号丢失,而后者不会。

        kill支持发送的信号列表可以通过kill
-l查看,而这些信号的具体含义可以通过man 7 signal查看。在我的机器上,man
7
signal输出的POSIX标准信号如下所示(kill支持的信号还有POSIX没有定义的非标准信号,这里没有摘出,感兴趣的同学可以通过man查看)。

Linux支持的标准信号有以下一些,一个信号有多个值的是因为不同架构使用的值不一样,比如x86,
ia64,ppc, s390, 有3个值的,第一个值是slpha和sparc,中间的值是 ix86,ia64,
ppc, s390, arm和sh,
最后一个值是对mips的,连字符-表示这个架构是缺这个信号支持的,

[plain] 

第1列为信号名;

Signal     Value     Action   Comment  

第2列为对应的信号值,需要注意的是,有些信号名对应着3个信号值,这是因为这些信号值与平台相关,将man手册中对3个信号值的说明摘出如下,the
first one is usually valid for alpha and sparc, the middle one for i386,
ppc and sh, and the last one for mips.


第3列为操作系统收到信号后的动作,Term表明默认动作为终止进程,Ign表明默认动作为忽略该信号,Core表明默认动作为终止进程同时输出core
dump,Stop表明默认动作为停止进程。

 

第4列为对信号作用的注释性说明。

SIGHUP        1       Term    Hangup detected on controlling terminal  

标准信号-POSIX.1-1990定义

                              or death of controlling process  

 Signal Value Action Comment
 ----------------------------------------------------------------------
 SIGHUP 1 Term Hangup detected on controlling terminal
     or death of controlling process
 SIGINT 2 Term Interrupt from keyboard
 SIGQUIT 3 Core Quit from keyboard
 SIGILL 4 Core Illegal Instruction
 SIGABRT 6 Core Abort signal from abort(3)
 SIGFPE 8 Core Floating point exception
 SIGKILL 9 Term Kill signal
 SIGSEGV 11 Core Invalid memory reference
 SIGPIPE 13 Term Broken pipe: write to pipe with no
     readers
 SIGALRM 14 Term Timer signal from alarm(2)
 SIGTERM 15 Term Termination signal
 SIGUSR1 30,10,16 Term User-defined signal 1
 SIGUSR2 31,12,17 Term User-defined signal 2
 SIGCHLD 20,17,18 Ign Child stopped or terminated
 SIGCONT 19,18,25 Cont Continue if stopped
 SIGSTOP 17,19,23 Stop Stop process
 SIGTSTP 18,20,24 Stop Stop typed at tty
 SIGTTIN 21,21,26 Stop tty input for background process
 SIGTTOU 22,22,27 Stop tty output for background process

SIGINT        2       Term    Interrupt from keyboard  

SIGKILL和SIGSTOP信号是不能被捕获,阻塞和忽略的。

SIGQUIT       3       Core    Quit from keyboard  

标准信号-SUSv2 and
POSIX.1-2001定义

SIGILL        4       Core    Illegal Instruction  

 Signal Value Action Comment
 --------------------------------------------------------------------
 SIGBUS 10,7,10 Core Bus error (bad memory access)
 SIGPOLL   Term Pollable event (Sys V).
     Synonym for SIGIO
 SIGPROF 27,27,29 Term Profiling timer expired
 SIGSYS 12,-,12 Core Bad argument to routine (SVr4)
 SIGTRAP 5 Core Trace/breakpoint trap
 SIGURG 16,23,21 Ign Urgent condition on socket (4.2BSD)
 SIGVTALRM 26,26,28 Term Virtual alarm clock (4.2BSD)
 SIGXCPU 24,24,30 Core CPU time limit exceeded (4.2BSD)
 SIGXFSZ 25,25,31 Core File size limit exceeded (4.2BSD)

SIGABRT       6       Core    Abort signal from abort(3)  

早在Linux 2.2SIGSYS, SIGXCPU,
SIGXFSZ和SIGBUS(非sparc和mips架构)的默认操作就是终止进程(但是不产生coredump)

SIGFPE        8       Core    Floating point exception  

在一些unix系统中SIGXCPU和SIGXFSZ信号是用来终止进程的,也是不产生coredunp,从Linux
2.4开始这些信号会产生coredump了。

SIGKILL       9       Term    Kill signal  

标准信号-其它信号

SIGSEGV      11       Core    Invalid memory reference  

  Signal  Value  Action Comment
  --------------------------------------------------------------------
  SIGIOT   6  Core IOT trap. A synonym for SIGABRT
  SIGEMT  7,-,7  Term
  SIGSTKFLT -,16,-  Term Stack fault on coprocessor (unused)
  SIGIO  23,29,22 Term I/O now possible (4.2BSD)
  SIGCLD  -,-,18  Ign  A synonym for SIGCHLD
  SIGPWR  29,30,19 Term Power failure (System V)
  SIGINFO  29,-,-    A synonym for SIGPWR
  SIGLOST  -,-,-  Term File lock lost
  SIGWINCH 28,28,20 Ign  Window resize signal (4.3BSD, Sun)
  SIGUNUSED -,31,-  Term Unused signal (will be SIGSYS)

SIGPIPE      13       Term    Broken pipe: write to pipe with no readers
 

信号29是在alpha中是 SIGINFO或SIGPWR,但是在sparc中是SIGLOST。

SIGALRM      14       Term    Timer signal from alarm(2)  

SIGEMT没有在POSIX.1-2001中定义,
但是在大多数Unix戏中是没有的,他的默认处理方式是coredump并且终止进程。
SIGPWR(没有在POSIX.1-2001中定义)他的默认处理方式是忽略。

SIGTERM      15       Term    Termination signal  

SIGIO(没有在POSIX.1-2001中定义)在一些Unix系统中的处理方式也是忽略。

SIGUSR1   30,10,16    Term    User-defined signal 1  

kill
pid的作用是向进程号为pid的进程发送SIGTERM(这是kill默认发送的信号),该信号是一个结束进程的信号且可以被应用程序捕获。若应用程序没有捕获并响应该信号的逻辑代码,则该信号的默认动作是kill掉进程。这是终止指定进程的推荐做法。

SIGUSR2   31,12,17    Term    User-defined signal 2  

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图
Copyright @ 2010-2019 澳门金沙30064在线网站 版权所有