kill与kill -9的区别

有时候我们使用kill无法杀掉一个进程,但是用kill -9却可以,why?

首先看一下kill的功能,man手册对kill描述如下:

KILL(1)                                          Linux User's Manual                                          KILL(1)

NAME
       kill - send a signal to a process

SYNOPSIS
       kill [ -signal | -s signal ] pid ...
       kill [ -L | -V, --version ]
       kill -l  [ signal ]

DESCRIPTION
       The  default  signal  for  kill  is TERM. Use -l or -L to list available signals.  Particularly useful signals
       include HUP, INT, KILL, STOP, CONT, and 0.  Alternate signals may be specified  in  three  ways:  -9  -SIGKILL
       -KILL.  Negative PID values may be used to choose whole process groups; see the PGID column in ps command out‐
       put. A PID of -1 is special; it indicates all processes except the kill process itself and init.

在NAME部分注明:kill的作用是向进程发送一个信号(并没有说是杀掉进程哈)。具体发送什么信号由后面接的参数决定。

那么为什么很多时候我们又可以杀掉进程?请看DESDCRIPTION部分: kill默认参数是TERM。也就是说,如果没指定具体的信号作为参数,则默认使用kill TERM pid。因此kill pid是可以杀掉一个进程。

那么问题来了,为什么有的时候kill不能杀掉进程,而kill -9就可以了?

《APUE》中关于信号的描述中有介绍,大多数信号可以被捕获的。而TERM信号就是在这个大多数里的,一些进程可能为了特殊的用途捕获了TERM信号,导致了你使用kill pid时无法杀掉进程。 另外《APUE》中也强调了,有两个信号不能被捕获,SIGKILL 和SIGSTOP

Note that the two signals SIGKILL and SIGSTOP can’t be caught.

没错,kill -9 就是向进程发送SIGKILL信号。

kill的man手册:

SIGNALS
       The signals listed below may be available for use with kill.  When known constant, numbers and default  behav‐
       ior are shown.

       Name     Num   Action    Description
       0          0   n/a       exit code indicates if a signal may be sent
       ALRM      14   exit
       HUP        1   exit
       INT        2   exit
       KILL       9   exit      cannot be blocked
       PIPE      13   exit
       POLL           exit
       PROF           exit
       TERM      15   exit
       USR1           exit
       USR2           exit
       VTALRM         exit
       STKFLT         exit      might not be implemented
       PWR            ignore    might exit on some systems
       ……
       ……
时间: 2024-12-23 10:11:48

kill与kill -9的区别的相关文章

【转载】Linux kill, killall, kill -9

1) 查看进程的方法:  ps -ef  或者 ps aux root     15087  0.0  0.0      0     0 ?        S    23:31   0:00 [kworker/1:1]root     15219  0.0  0.0      0     0 ?        S    23:36   0:00 [kworker/1:0]root     15460  0.0  0.0      0     0 ?        S    23:41   0:0

Linux中杀死进程kill和killall命令的区别

小知识:阅读约2分钟 kill [信号代码] 进程ID 注:信号代码可以省略:我们常用的信号代码是 -9 ,表示强制终止. 对于僵尸进程,可以用kill -9 来强制终止退出. kill 的应用,是和ps 或pgrep 命令结合在一起使用的.如下: 1 [[email protected] ~]# ps -ef|grep magic_Linux 2 root 13020 1 1 1月16 ? 00:33:35 ./magic_Linux01 3 root 22761 1 1 01:27 ? 00

What is the difference between Kill and Kill -9 command in Unix?

w difference kill -9 pid and kill pid command - Ask Ubuntu  https://askubuntu.com/questions/791841/difference-kill-9-pid-and-kill-pid-command kill pid (which sends signal 15 (SIGTERM)) tells pid to terminate, but said program can execute some code fi

linux kill杀死进程

背景:这个命令总是记不住,在此稍作记录,方便查看! 1 杀死进程 1.1 查看进程 此时如果我想杀了火狐的进程就在终端输入: $ kill -s 9 1827 其中-s 9 制定了传递给进程的信号是9,即强制.尽快终止进程.各个终止信号及其作用见附录. 简单吧,但有个问题,进程少了则无所谓,进程多了,就会觉得痛苦了,无论是ps -ef 还是ps -aux,每次都要在一大串进程信息里面查找到要杀的进程,看的眼都花了. 进阶篇: 改进1: 把ps的查询结果通过管道给grep查找包含特定字符串的进程.

Linux下查询进程PS或者杀死进程kill的小技巧

假设我们要kill掉tomcat: 那么我们首先需要tomcat的进程号pid: ps -aux | grep tomcat 记下tomcat的PID后,执行:kill PID(tomcat) 好了,就到这里.... 路人甲:小的们,灭了这个欺骗人民情感的家伙! me:咳咳!大家冷静冷静,me这就给大家加菜... ------------------------------------------------- 学习不是为了变懒,那和咸鱼有什么区别! ps -aux | grep flume后的

进程监控top free ps grep pgrep pkill kill & bg fg jobs nohup ctrl+z pstree

一.top命令 https://blog.csdn.net/gxiaop/article/details/55096686 1是显示其他cpu内容 M按照内存排序 P按照cpu排序 K 杀掉某个进行 nice 表示优先级改动过的,优先级数字越低,优先度越大 top -p 1234 显示1234的情况 二.free命令 free 按照kb显示 free -m 按照m显示 free -h 按照G显示 三.ps命令 https://blog.csdn.net/u014636209/article/de

【转】linux下杀死进程(kill)的N种方法

转载一篇,最原始的出处已不可考,望见谅! 常规篇: 首先,用ps查看进程,方法如下: $ ps -ef --smx       1822     1  0 11:38 ?        00:00:49 gnome-terminalsmx       1823  1822  0 11:38 ?        00:00:00 gnome-pty-helpersmx       1824  1822  0 11:38 pts/0    00:00:02 bashsmx       1827    

Process Kill Technology && Process Protection Against In Linux

目录 0. 引言 1. Kill Process By Kill Command 2. Kill Process By Resource Limits 3. Kill Process By Code Injection Into Running Process Via GDB 4. Kill Process By Using Cross Process Virtual Memory Modify 5. Kill Process By Using ptrace To Inject .so 6. P

批量 kill mysql 中运行时间长的sql

转自:思齐-批量 kill mysql 中运行时间长的sql 以下内容来自mysql手册: 13.5.5.3. KILL语法KILL [CONNECTION | QUERY] thread_id每个与mysqld的连接都在一个独立的线程里运行,您可以使用SHOW PROCESSLIST语句查看哪些线程正在运行,并使用KILL thread_id语句终止一个线程. KILL允许自选的CONNECTION或QUERY修改符: · KILL CONNECTION与不含修改符的KILL一样:它会终止与给