linux系列之:告诉他,他根本不懂kill

Linux命令·kill·killall kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。killall命令用于杀死指定名字的进程 阅读详情

简介

和很多程序员打过交道,这些程序员可能熟知for遍历的好几种写法,但是却对写出来的程序部署的环境一无所知。我敢打赌,在spring boot出现之后,已经很少有程序员知道tomcat到底是怎么运行的了。对于他们来说,运行一个jar包就完事了。

工具的先进性确实带给我们很多便利,也提升了程序员的开发效率,同时也降低了程序员的进入门槛。今天想和大家一起讨论一下,linux中的kill命令到底是做什么用的。

可能很很多小伙伴第一次接触kill命令是同事告诉他,把进程kill掉。那么kill真的是用来杀进程的吗?

使用kill来杀死进程

先来看一个kill最基本,也是最常见的应用就是杀死进程。在杀死进程之前,我们需要找到这个进程ID。

一般情况下是使用ps命令找到这个进程ID。加入这个进程ID=54321。

那么接下来就可以使用kill 54321来杀死这个进程了。

更资深一点的同学,可能还会使用kill -9 54321来强制杀死这个进程。

有没有更深入的用法呢?有的,一起来看看。

kill的深入用法

先看一下kill的命令参数到底有那些:

kill 
kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]

可以看到kill的参数是sig,也就是信号。也就是说kill的本质是向程序传递信号的。

如果使用 kill -l ,我们可以得到到底kill可以传递多少信号:

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

总共64个信号,可能不同的kill版本,信号有所不同,但是基本上都覆盖了常用的信号。

下面是一些常用信号的含义:

HUP     1    终端断线
INT       2    中断(同 Ctrl + C)
QUIT    3    退出(同 Ctrl + \)
TERM    15    终止
KILL      9    强制终止
CONT   18    继续(与STOP相反, fg/bg命令)
STOP    19    暂停(同 Ctrl + Z)

怎么看kill的版本呢?

/bin/kill --version
kill from util-linux 2.23.2

如果kill不传sig,那么将会传默认的sig=TERM,也就是15。所以上面的kill 54321和 kill -15 54321是等价的。

一般情况下,我们优先使用SIGTERM信号。这是因为当程序收到了SIGTERM信号之后,会做一些程序的清理操作,或者说是优雅的关闭。

如果传入kill -9 也就是SIGKILL,那么应用程序将无法捕捉这个信号,从而导致程序强制被关闭,有可能会照成一些异常情况,比如数据还没有保存,数据传输还没有结束等等。

sig还有一个特殊值叫做0,如果传入0的话,那么并不会发送实际的信号,这个只是做异常检测用的。

pid就是process id,可以理解为是进程号。除了进程号之外,还可以传入一些特殊值,比如:

  • 0 表示当前进程group的所有进程
  • -1 表示所有PID>1的进程

还有一个特殊的pid=1,这个pid表示的是初始进程init,这个进程是不可被杀死的。

除了PID之外,我们看到kill还可以接受jobspec。job id可以使用jobs命令来列出。

僵尸进程和kill

上面讲到了pid=1的初始进程是不能被kill的。还有一种不能被kill的进程叫做僵尸进程。

僵尸进程是linux程序中一个非常独特的状态,它表示的是进程已经结束了,但是又还没有完全死亡,就像僵尸一样。

linux中的5大进程状态分别是:RUNNING:正在运行或等待运行状态,UNINTERRUPTABLE:不可中断阻塞状态,INTERRUPTABLE:可中断阻塞状态,STOPPED:挂起状态和ZOMBIE:僵尸状态。

那么什么是僵尸进程呢?

僵尸进程指的是程序在退出之后,该进程并不是马上消失的,而是会保留一个被称为僵尸的数据结构。这个数据结构很特殊,因为其没有内存空间,没有可执行的代码,当然也不可以被调度。它只是在进程列表中占有一个位置,记录了该进程退出时候的各种信息。

僵尸进程主要是保留进程退出的现场,供父进程或者系统管理员进行分析使用的,所以僵尸进程是交由父进程来进行收集和释放的。因为僵尸进程已经退出了,所以使用kill是没有用的,只能等待其父进程退出,才能真正的退出。

怎么查看僵尸进程呢?最简单的方法就是使用top命令:

top - 14:34:38 up 305 days,  4:23,  2 users,  load average: 0.20, 0.29, 0.47
Tasks:  93 total,   1 running,  92 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.0 us,  0.7 sy,  0.0 ni, 97.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1882008 total,   525524 free,   311440 used,  1045044 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1382560 avail Mem 

上面的输出,我们可以看到里面有0个zombie。

java thread dump

kill还有一个非常有用的地方就是生成java程序的thread dump,将当前java程序的线程信息dump出来,可以进行一些有用的分析,比如死锁分析等。

怎么对java进程做thread dump呢?很简单使用kill -3 命令即可:

kill -3 <pid>

从上面我们的介绍可以指定3代表的信号是SIGQUIT。这说明JVM内置了这个信号的捕捉,如果接收到了这个信号,则会dump当前的线程信息。

java thread dump在对java进行线程分析的时候非常有用。

总结

本文介绍了kill的深入用法和底层的工作原理,还介绍了kill的几个应用,希望下次有人再问你kill到底是什么的时候,大家都可以很自豪的告诉他!

Linux命令200例:kill用来终止或者结束进程(常用) kill命令是Linux系统中一个非常重要的命令,它用于向进程发送信号,通常用来终止(杀死)进程。本篇文章将详细介绍kill命令的使用方法,并给出一些常见的应用场景和实际例子。本篇文章详细介绍了Linux中kill命令的使用方法、常用信号和一些常见的应用场景,并举例说明了每个场景的具体操作步骤。通过学习和掌握kill命令,我们可以更好地管理和调试系统中的进程,提高工作效率。推荐你阅读本专栏Linux命令大全,以便更深入地理解和应用这些命令。 阅读详情

相关推荐

AWS RDS 介绍 三)创建 RDS 实例

AWS RDS 介绍 共分为 7 个部分, 其中 第 3部分重点介绍,如何创建一个RDS 实例。 三) AWS RDS 试用MySQL http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/CHAP_GettingStarted.CreatingConnecting.MySQL.

XuYongshi02的专栏 7646

Linux如何查看进程、kill进程、启动进程

查看firefox的进程ID: ps -ef | grep firefox 或者 top | grep firefox   使用kill指令来终止进程: kill -s 9 进程ID     // -s 9表示发送给进程的信号是9(SIGKILL);   根据进程的名字来终止进程: pgrep firefox | xargs kill -s 9  // pgrep的p表明了这个命...

Peace 2万+

Lede(OpenWrt)安装和双宽带叠加

LEDE是一个专为路由器和嵌入式设备设计的自由和开源的操作系统。LEDE是OpenWRT项目的一个分支项目。LEDE操作系统包括许多路由器有用的功能,如网络地址转换、防火墙、端口转发、DHCP服务器等。

我的博客 6441

kill命令 --杀死进程 参数详解和用途 前15个

当用kill向这些进程发送信号时,必须是这些进程的主人。SIGBUS: 当一个进程被发送SIGBUS信号时,是因为该进程导致了一个总线错误,通常这些总线错误是由于进程试图使用假物理地址或进程的内存对齐设置不正确造成的。SIGINT: 该信号与按Ctrl+C相同,在某些系统上delete + break会向进程发送相同的信号,该进程被中断并停止,但是该进程自身可以忽略此信号。SIGILL: 当一个进程执行一个错误的、禁止的或未知的功能时,系统向该进程发送SIGILL信号,这是代表非法操作的信号。

zero_open的博客 3万+

PX4无人机实战:手把手教你用MAVROS实现Offboard模式(附避坑指南)

本文提供了一份详尽的PX4无人机Offboard模式实战指南,重点解析了如何通过MAVROS实现从仿真到实机的控制。内容涵盖硬件连接、串口权限设置、MAVROS配置、核心代码编写以及实机操作全流程,并附有详细的避坑指南和故障排查手册,帮助开发者快速掌握ROS与PX4飞控的集成开发。

weixin_29172201的博客 267

手把手教你利用qemu搭建银河麒麟V11 arm环境

在Windows环境下,初学者或企业用户常通过VMware、VirtualBox等虚拟机软件安装Ubuntu、Red Hat等Linux系统,这类工具更侧重X86等复杂指令集架构(CISC,常见于Intel、AMD处理器)的虚拟化。而QEMU是一款开源的虚拟机监视器与模拟器,核心优势在于可模拟ARM、MIPS、RISC-V等精简指令集架构(RISC)的处理器并提供虚拟化能力,更适合对虚拟化技术有一定了解的用户。可能是电脑性能问题,安装过程比较慢,需要耐心等待。等操作系统下载完成后,进行安装了。

huanhuanzhou blog 2455

Linux kill命令原理及源码实现

在 Linux 环境上工作时,你可能会看到应用程序或命令行进程卡住。 那么在这些情况下,终止它是唯一的出路。 Linux 中的 kill 命令(位于 /bin/kill),是一个内置命令,用于手动终止进程。 kill 命令非常易于理解和使用。 kill 命令向终止进程的进程发送信号。 如果用户没有指定要与 kill 命令一起发送的任何信号,则发送默认的 TERM 信号以终止进程。 什么是信号 官方的解释是: A signal is an asynchronous notification sent to

chen1415886044的博客 5194

qwen2vl ValueError: Image features and image tokens do not match: tokens: 568, features 600

本文介绍了一个用于计算多模态数据集中样本token数量的Python工具,特别针对包含文本和图像的Qwen2-VL模型数据集。

q742971636的博客 1012

Linux 之 kill 命令

一. kill命令简介 在Linux系统中,kill命令用于向运行中的进程发送信号,默认发送的信号是终止信号,会请求进程退出。kill(杀)可能会引起误解,实际上发送的信号可能与杀死进程无关。 我们最常使用到的kill命令为: kill PID kill -9 PID 前者为请求目标进程退出,后者为强制杀死目标进程。 1. kill PID kill命令默认发送的信号是SIGTERM。该信号会被目标进程捕获,在收到这个信号以后目标进程可以做一些有用的操作(如保存数据),然后退...

Dancen的专栏 2万+

YOLOv11 模型改进全流程:从代码修改到性能跃升,让你打造专属检测利器

无论是科研中需要发表创新点满满的论文,还是企业里要解决特定场景的检测难题,这套方法都能让你在YOLOv11的基础上打造出“量身定制”的检测模型。别再让通用模型的“平庸性能”限制你的项目上限——现在就动手修改代码,让你的YOLOv11模型在精度、速度或小样本适应能力上实现跨越式提升,用技术突破证明你的AI研发实力!本文将带你从代码层面入手,完成从骨干网络到损失函数的全维度改进,真正掌握让YOLOv11“为你所用”的技术实力。该改进对小样本类别(如数据集中仅占5%的“稀有缺陷”)的识别精度提升显著。

m0_71589036的博客 402

深度测评:Accio Work——目前普通用户最友好的多 Agent 协同工具

摘要:Accio Work是阿里国际站推出的多Agent协同工具,通过借鉴古代"三省六部制"构建高效协作框架。该工具支持主流大模型,可配置专业Agent角色,实现40分钟内完成复杂产品PRD等高效协作。其亮点在于直观的UI设计和流程驱动机制,能强制各Agent从专业视角深度思考。虽然超长对话稳定性有待优化,但作为目前最用户友好的多Agent工具,显著降低了构建复杂AI团队的门槛,成为提升个人和小微企业生产力的利器。

Maynor的博客 1734

Linux命令之终止进程kill

`kill` 命令可以用来终止进程,即杀死某些进程。

二木成林 2万+

使用 IMDb API 获取电影评分和评论的 Python 爬虫

电影是人们娱乐生活中的重要组成部分,随着电影产业的快速发展,观众对电影的评价也越来越多样化。IMDb(互联网电影数据库)作为全球最大的电影评分和评论平台之一,收录了成千上万部电影、电视节目及其相关数据。它提供了一个强大的 API 接口,允许开发者访问电影的评分、评论、演员信息等数据。本文将带你一步一步实现一个 Python 爬虫,使用 IMDb API 获取电影的评分和评论。我们将通过这个爬虫来分析一些热门电影的观众反馈,并可视化分析结果。

2201_76125261的博客 1055

Linux kill命令与kill函数:从信号原理到实战解析

本文全面解析Linux中的kill命令与kill函数,揭示其信号机制原理与应用场景。信号作为进程间通信方式,包括SIGTERM(优雅终止)、SIGKILL(强制终止)等类型。kill命令通过系统调用向进程发送信号,支持进程组操作和信号列表查询;kill函数则为编程接口,参数顺序与命令相反,可实现进程间通信。两者本质均依赖sys_kill()系统调用。文章强调优先使用SIGTERM、谨慎使用SIGKILL的原则,并提供批量终止进程和优雅退出的实战技巧,帮助读者深入理解Linux进程管理机制。

软件科学-郝学胜 1997

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Linux之kill命令

【Linux常用命令速查手册】关注【入门小站】,后台回复 「1001」 自取。 Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令。通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须用kill命令来终止,我们就需要先使用ps/pidof/pstree/top等工具获取进程PID,然后使用kill命令来杀掉该进程。kill命令是通过向进程发送指定的信号来结束相应进程的。在默认情况下,采用编号为15的TERM.

Linux,Java,SpringBoot,Python,Lua略知一点 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

linux基本功系列之kill命令实战

linux基本功之kill命令实战

低调,谦虚,自律,反思,成长,保持热爱,奔赴梦想 1715

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

linux命令kill9的含义,[整理]kill -9的含义

折腾:期间,看到一个:kill -9需要去搞懂对应含义。搜:kill 9 meaningName Num Action DescriptionKILL 9 exit cannot be blockedThe command kill sends the specified signal to the specified process or proces...

weixin_33162074的博客 9104

Linux中Kill进程的N种方法

linux的进程管理手段丰富。想怎么杀进程都可以。废话少说,正题开始: 常规篇: 首先,用ps查看进程,方法如下: $ ps -ef 或者: $ ps -aux 此时如果我想杀了火狐的进程就在终端输入: $ kill -s 9 1827 其中-s 9 制定了传递给进程的信号是9,即强制、尽快终止进程。各个终止信号及其作用见附录。 1827则是上面ps查到的火狐的P...

m0_37673307的博客 3万+

linux kill命令详解

1.命令格式 kill [参数] [进程号] 2.命令功能: 发送指定的信号到相应进程。不指定型号将发送SIGTERM(15)终止指定进程。如果任无法终止该程序可用“-KILL” 参数,其发送的信号为SIGKILL(9) ,将强制结束进程,使用ps命令或者jobs 命令可以查看进程号。root用户将影响用户的进程,非root用户只能影响自己的进程。 3.命令参数: -l 信号,若果不加信号的编号...

一名高级工程师的博客 6871

Linux之kill命令详解

@Author : Spinach | GHB @Link : http://blog.youkuaiyun.com/bocai8058 文章目录概念语法、选项和参数例程kill -1、kill -9、kill -15 概念 kill命令用来删除执行中的程序或工作。 kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(...

GSpinach的博客 9827

linux杀进程kill 9,在 Linux 中 kill、kill -9、kill -3命令是什么意思有什么区别

很多同学在日常使用 Linux 中会经常使用 kill 命令来杀死进程,有的直接使用 kill,有的使用 kill -9,有的使用 kill -3,他们是什么意思呢,有什么区别呢,今天我们就了解一下 Kill 命令和 Linux 中的信号。Kill命令kill命令的格式是 kill -Signal pid,其中 pid 就是进程的编号,signal是发送给进程的信号,默认参数下,kill 发送 S...

weixin_39975486的博客 5111

Linux中kill -2、kill -9等区别 &amp;&amp; kill signal汇总_kill -2和kill -9区别(1)

如果父进程没有处理这个信号,也没有等待(wait)子进程,子进程虽然终止,但是还会在内核进程表中占有表项,这时的子进程称为僵尸进程。这种情 况我们应该避免(父进程或者忽略SIGCHILD信号,或者捕捉它,或者wait它派生的子进程,或者父进程先终止,这时子进程的终止自动由init进程来接管)。列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。用来立即结束程序的运行. 本信号不能被阻塞、处理和忽略。

2401_83947105的博客 997

Linux: kill, pkill, killall命令的区别

一、概要 1. kill 命令根据进程号(pid)杀死单个进程 2. pkill 命令根据名字杀死该名字下的所有进程 3. killall 命令根据名字杀死该名字下的所有进程,跟pkill类似 二、kill 命令 Linux kill 命令用于删除执行中的程序或工作。 kill 可将指定的信息送至程序。预设的信息为 SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用 SIGKILL(9) 信息尝试强制删除程序。 基本用法: kill 2153 # 杀死进程号为2153的

JacksonKim的博客 6390
上一篇: 一招搞定 Spring Boot 可视化监控!
下一篇: 这也许是你的知识盲区-[MySQL主从架构]之半同步机制
在酒吧写代码
博客等级 码龄7年 210粉丝 330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值