大道至简,知易行难
广阔天地,大有作为

kill命令详解

尽管常常用来杀进程,但kill命令的真正作用是send a signal to a process(向一个进程发送一个信号),kill命令的语法是:
kill [options] <pid> […]
其中,pid可以是负的,用于选择整个进程组(参见ps命令中的PGID列)。当pid为-1时,代表所有除了kill进程和init进程外的所有进程。
 
kill命令发出的默认信号是TERM,因此常常被用来结束进程。但实际上我们可以使用-L参数列出所有支持的信号,请注意:
Your shell (command line interpreter) may have a built-in kill command. You may need to run the command described here as /bin/kill to solve the conflict.
即:
命令行解释器(Shell)可能内置了kill命令,因此可能需要使用/bin/kill。
例如,在Ubuntu环境下就需要使用/bin/kill:
使用kill -L命令列出所有信号

使用kill -L命令列出所有信号

否则会报错:

-bash: kill: L: invalid signal specification

以Ubuntu系统为例,所列出的信号量包括:
1 HUP 2 INT 3 QUIT 4 ILL 5 TRAP 6 ABRT 7 BUS 8 FPE 9 KILL 10 USR1 11 SEGV 12 USR2 13 PIPE 14 ALRM 15 TERM 16 STKFLT 17 CHLD 18 CONT 19 STOP 20 TSTP 21 TTIN 22 TTOU 23 URG 24 XCPU 25 XFSZ 26 VTALRM 27 PROF 28 WINCH 29 POLL 30 PWR 31 SYS
我们可以通过三种方式来指定信号,例如:-9、-KILL或-SIGKILL。在这里信号中,常用的信号主要包括HUP、INT、KILL、STOP、CONT和0。
1、HUP。根据约定,当发送一个HUP(1)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件。如果想要更改配置而不停止并重新启动服务,就可以使用HUP信号该命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。例如, 我们常常使用这个信号来重启nginx等Web服务器或重新加载配置,因为是从容地重启,因此服务是不中断的。
2、INT。是当用户输入<Ctrl+C>时由终端驱动程序发送的信号。这是一个终止当前操作的请求,如果捕获了这个信号,一些简单的程序应该退出,或者允许自给被终止,这也是程序没有捕获到这个信号时的默认处理方法。拥有命令行或者输入模式的那些程序应该停止它们在做的事情,清除状态,并等待用户的再次输入。
3、KILL。杀死,我们常常使用这个信号来立即强制结束某个进程的执行。
4、TERM。终止,kill命令默认发出的信号,请求彻底终止某项执行操作。
每个信号的具体含义可以使用:
man 7 signal
命令查看:
使用man 7 signal命令查看信号含义

使用man 7 signal命令查看信号含义

上图中的Action一列的值指明了每个信号默认的处理方式,包括:
Term   Default action is to terminate the process.
Ign     Default action is to ignore the signal.
Core   Default action is to terminate the process and dump core (see core(5)).
Stop   Default action is to stop the process.
Cont   Default action is to continue the process if it is currently stopped.
下表列出了所有的信号含义:
Signal
信号
Value
Action
默认动作
Comment
含义(发出信号的原因)
Comment中文翻译
原始的POSIX.1-1990标准中的信号
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) 来自abort的异常信号
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) 来自alarm的计时器到时信号
SIGTERM 15 Term Termination signal 终止
SIGUSR1 30,10,16 Term User-defined signal 1 用户自定义信号1
SIGUSR2 31,12,17 Term User-defined signal 2 用户自定义信号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 terminal 来自终端的停止信号
SIGTTIN 21,21,26 Stop Terminal input for background process 后台进程读终端
SIGTTOU 22,22,27 Stop Terminal output for background process 后台进程写终端
不在POSIX.1-1990中但在SUSv2和POSIX.1-2001中的信号
SIGBUS 10,7,10 Core Bus error (bad memory access) 总线错误(错误的内存访问)
SIGPOLL   Term Pollable event (Sys V).Synonym for SIGIO Pollable事件发生(Sys V),与SIGIO同义
SIGPROF 27,27,29 Term Profiling timer expired 统计分布图用计时器到时
SIGSYS 12,-,12 Core Bad argument to routine (SVr4) 非法系统调用(SVr4)
SIGTRAP 5 Core Trace/breakpoint trap 跟踪/断点自陷
SIGURG 16,23,21 Ign Urgent condition on socket (4.2BSD) socket紧急信号(4.2BSD)
SIGVTALRM 26,26,28 Term Virtual alarm clock (4.2BSD) 虚拟计时器到时(4.2BSD)
SIGXCPU 24,24,30 Core CPU time limit exceeded (4.2BSD) 超过CPU时限(4.2BSD)
SIGXFSZ 25,25,31 Core File size limit exceeded (4.2BSD) 超过文件长度限制(4.2BSD)
其他常见的信号
SIGIOT 6 Core IOT trap. A synonym for SIGABRT IOT自陷,与SIGABRT同义
SIGEMT 7,-,7     Term
SIGSTKFLT -,16,- Term Stack fault on coprocessor (unused) 协处理器堆栈错误(不使用)
SIGIO 23,29,22 Term I/O now possible (4.2BSD) 描述符上可以进行I/O操作
SIGCLD -,-,18 Ign A synonym for SIGCHLD 与SIGCHLD同义
SIGPWR 29,30,19 Term Power failure (System V) 电力故障(System V)
SIGINFO 29,-,-   A synonym for SIGPWR 与SIGPWR同义
SIGLOST -,-,- Term File lock lost (unused) 文件锁丢失
SIGWINCH 28,28,20 Ign Window resize signal (4.3BSD, Sun) 窗口大小改变(4.3BSD, Sun)
SIGUNUSED -,31,- Term Synonymous with SIGSYS 未使用信号(will be SIGSYS)
其中:
1、蓝色的是POSIX.1-1990标准信号。SIGKILL和SIGSTOP信号不能被挂钩、阻塞或忽略。
2、青色的是SUSv2和POSIX.1-2001定义的信号。在Linux 2.2(包括)内核之前,SIGSYS、SIGXCPU、SIGXFSZ和SIGBUS (SPARC和MIPS架构除外)的默认动作是终止进程,但没有core dump。Linux 2.4遵循POSIX.1-2001要求,这些信号的默认动作改为:终止进程同时做core dump。
3、橙色的是其他常见的信号。信号29在Alpha上为SIGINFO / SIGPWR ,在Sparc上为SIGLOST。SIGEMT没有在POSIX.1-2001中说明,但是在大多数的Unices中仍然能见到,典型的默认动作是终止进程并做core dump。SIGPWR没有在POSIX.1-2001中说明,在使用它的一些Unices中典型的默认动作是忽略。SIGIO没有在POSIX.1-2001中说明,在使用它的一些Unices中典型的默认动作是忽略。
 
一个进程可以通过使用sigaction和signal系统调用来改变信号的默认处理方式(使用signal的可移植性差)。进程可以选择下列3种信号处理方式中的一种:
1、执行默认操作;
2、忽略该信号;
3、捕获该信号,但是通过信号句柄来调用自定义的处理函数。
信号可能被阻塞。进程中的每个线程拥有独立的信号掩码,用来表示本线程的信号被阻塞。线程通过pthread_sigmask来设置它的信号掩码。单线程程序可以用sigprocmask来操作信号掩码。在多线程程序中,所有线程处理一个指定信号的默认行为都是一样的。
 
 

转载时请保留出处,违法转载追究到底:进城务工人员小梅 » kill命令详解

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址