之前只知道kill、killall命令,能杀死进程就行,有些进程杀不死的也不知道为何,今天看书发现出来kill、killall命令,还有一个pkill命令,详细看了下他们的介绍和使用。

kill杀进程的工作原理

首先了解下kill为何能杀死进程,信号是Linux中的一种进程间通信机制,我们可以使用特定的信号来中断进程。每一种信号都同一个整数值相关联。当进程接收到一个信号时,它会通过执行对应的信号处理程序(signal handler)来进行响应。kill命令可用来向进程发送信号,而trap命令用来处理所接收的信号。
(ctrl+c、ctrl+z也会发出各自的信号)

kill

信号编号

[root@server ]# kill -l     #打印出信号编号以及对应信号名称1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP6) 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

kill终止进程方式

 -s, --signal signalSpecify the signal to send.  The signal may be given as a signal name or number.
-l, --list [signal]Print a list of signal names, or convert signal given as argument to a name.  The signals are found in /usr/include/linux/signal.h
-L, --tableSimilar to -l, but will print signal names and their corresponding numbers.
-a, --allDo not restrict the commandname-to-pid conversion to processes with the same uid as the present process.
-p, --pidSpecify that kill should only print the process id (pid) of the named processes, and not send any signals.
-q, --queue sigvalUse sigqueue(2) rather than kill(2) and the sigval argument is used to specify an integer to be sent with the signal.  If the receiving process has installed a handler for this signal using the  SA_SIGINFO,flag to sigaction(2), then it can obtain this data via the si_value field of the siginfo_t structure.

kill PROCESS_ID_LIST

LISTkill命令默认发出一个TERM信号,对照信号编号看,应该为15。进程ID列表使用空格作为进程ID之间的定界符。下面试下kill及kill -15:

[root@server ~]# md5sum /dev/zero &
[1] 14652
[root@server ~]# md5sum /dev/zero &
[2] 15978
[root@server ~]# kill 14652 15978
[1]-  已终止               md5sum /dev/zero
[2]+  已终止               md5sum /dev/zero
[root@server ~]# md5sum /dev/zero &
[1] 23550
[root@server ~]# md5sum /dev/zero &
[2] 23592
[root@server ~]# kill -15 23550 23592
[1]-  已终止               md5sum /dev/zero
[2]+  已终止               md5sum /dev/zero

发现都终止了进程,感觉有点可信,不过可以终止进程的信号编号不止15,还有其他,信不信也关系不大;

kill -s SIGNAL PID

参数SIGNAL要么是信号名称,要么是信号编号。尽管有很多信号可用于不同的目的,但经常用到的其实只有那么几个,具体如下所示。
□ SIGHUP 1——对控制进程或终端的终结进行挂起检测(hangup detection)。
□ SIGINT 2——当按下Ctrl+C时发送该信号。
□ SIGKILL 9——用于强行杀死进程。
□ SIGTERM 15——默认用于终止进程。
□ SIGTSTP 20——当按下Ctrl+Z时发送该信号。

我们经常要强行杀死进程,可以使用:$ kill-s SIGKILL PROCESS_ID(与kill-9 PROCESS_ID等效)

[root@server ~]# md5sum /dev/zero &
[1] 18708
[root@server ~]# md5sum /dev/zero &
[2] 19229
[root@server ~]# kill -s SIGKILL 18708
[1]-  已杀死               md5sum /dev/zero
[root@server ~]# kill -9 19229
[2]+  已杀死               md5sum /dev/zero

linux 的 kill命令是向进程发送信号,-9表示无条件退出,但由进程自行决定是否退出,这就是为什么 kill -9 终止不了系统进程和守护进程的原因。

killall

help-e,--exact          require exact match for very long names-I,--ignore-case    case insensitive process name match-g,--process-group  kill process group instead of process-y,--younger-than   kill processes younger than TIME-o,--older-than     kill processes older than TIME-i,--interactive    ask for confirmation before killing-l,--list           list all known signal names-q,--quiet          don't print complaints-r,--regexp         interpret NAME as an extended regular expression-s,--signal SIGNAL  send this signal instead of SIGTERM-u,--user USER      kill only process(es) running as USER-v,--verbose        report if the signal was successfully sent-V,--version        display version information-w,--wait           wait for processes to die-Z,--context 正则表达式 仅杀死含有指定上下文的进程(必须在其他参数前使用)

killall命令通过命令名终止进程,可以接受信号名称和信号编号;
$ killall process_name

[root@server ~]# md5sum /dev/zero &
[1] 22811
[root@server ~]# ps -ef |grep md5sum
root     22811 19683 99 21:34 pts/5    00:05:57 md5sum /dev/zero
root     28368 19683  0 21:40 pts/5    00:00:00 grep --color=always md5sum
[root@server ~]# killall md5sum
[1]+  已终止               md5sum /dev/zero

$ killall-s SIGNAL process_name通过名称强行杀死进程:

[root@server ~]# md5sum /dev/zero &
[2] 368
[root@server ~]# md5sum /dev/zero &
[2] 26834
[root@server ~]# killall -s SIGKILL md5sum    #同样的名称的进程会被一起杀掉
[1]+  已杀死               md5sum /dev/zero
[2]-  已杀死               md5sum /dev/zero
[root@server ~]# md5sum /dev/zero &
[1] 17233
[root@server ~]# killall -s 9 md5sum   #与killall -s SIGKILL md5sum效果一致
[1]+  已杀死               md5sum /dev/zero

通过名称以及所属用户名指定进程:
$ killall-u USERNAME process_name

[root@server ~]# md5sum /dev/zero &
[1] 31070
[root@server ~]# killall -u root md5sum     #指定用户杀他的进程,多用户的情况下感觉不错,我的进程是root用户起的
[1]+  已终止               md5sum /dev/zero

如果需要在杀死进程前进行确认,可以使用killall的-i选项

[root@server ~]# md5sum /dev/zero &
[1] 13588
[root@server ~]# killall -i md5sum
杀死 md5sum(13588) ? (y/N) N
md5sum: no process found
[root@server ~]# killall -i md5sum
杀死 md5sum(13588) ? (y/N) Y
[1]+  已终止               md5sum /dev/zero

比较kill和killall命令,发现最大的不同就是一个接受进程号,一个接受进程名,其他不同不是很明显

pkill

help
Options:-<sig>, --signal <sig>    signal to send (either number or name)-e, --echo                display what is killed-c, --count               count of matching processes-f, --full                use full process name to match-g, --pgroup <PGID,...>   match listed process group IDs-G, --group <GID,...>     match real group IDs-n, --newest              select most recently started-o, --oldest              select least recently started-P, --parent <PPID,...>   match only child processes of the given parent-s, --session <SID,...>   match session IDs-t, --terminal <tty,...>  match by controlling terminal-u, --euid <ID,...>       match by effective IDs-U, --uid <ID,...>        match by real IDs-x, --exact               match exactly with the command name-F, --pidfile <file>      read PIDs from file-L, --logpidfile          fail if PID file is not locked--ns <PID>                match the processes that belong to the samenamespace as <pid>--nslist <ns,...>         list which namespaces will be considered forthe --ns option.Available namespaces: ipc, mnt, net, pid, user, uts-h, --help     display this help and exit-V, --version  output version information and exitFor more details see pgrep(1).

pkill命令和kill命令类似,不过默认情况下pkill接受的是进程名,而非进程ID。并且pkill不支持信号名称。pkill提供了很多和kill相同的选项。例如:
$ pkill process_name
$ pkill-s SIGNAL process_name #SIGNAL是信号编号。

[root@server ~]# md5sum /dev/zero &
[2] 5078
[root@server ~]# pkill md5sum
[1]-  已终止               md5sum /dev/zero
[2]+  已终止               md5sum /dev/zero
[root@server ~]# md5sum /dev/zero &
[2] 7067
[root@server ~]# md5sum /dev/zero &
[3] 8599
[root@server ~]# pkill -o md5sum   #杀死较老的进程
[2]   已终止               md5sum /dev/zero
[root@server ~]# ps -ef |grep md5sum
root      8599 30354 99 22:43 pts/5    00:00:11 md5sum /dev/zero
root     13831 30354  0 22:43 pts/5    00:00:00 grep --color=always md5sum

pkill不支持信号名称。pkill提供了很多和kill相同的选项。
看到一篇不错的文章,专门介绍pkill的,如果想详细了解pkill还可以看看下面的博文
https://blog.csdn.net/carefree2005/article/details/118190076

简单介绍下找进程名称及PID方法
pgrep 进程名称 #显示进程ID
ps -ef |grep -i 进程名|grep -v grep #进程名称不用全称,不区分大小写

[root@server ~]# pgrep md5sum
8599
15282
[root@server ~]# ps -ef |grep -i mD5suM |grep -v grep
root      8599 30354 99 22:43 pts/5    00:16:27 md5sum /dev/zero
root     15282 30354 99 22:53 pts/5    00:06:51 md5sum /dev/zero

杀linux进程的几种命令详解相关推荐

  1. linux tf命令,Linux系统命令介绍之vmstat命令详解

    今天小编要跟大家介绍的vmstat命令详解.熟悉Linux系统和使用Linux系统工作的小伙伴都知道Linux的命令有很多,而真正在工作中用到的命令应该不超过几十个,为了让大家更好的掌握这些命令,小编 ...

  2. linux PS -df,linux中ps跟df命令详解

    linux中ps和df命令详解 linux下PS命令 linux上进程有5种状态: 1.运行(正在运行或在运行队列中等待) 2.中断(休眠中,受阻,在等待某个条件的形成或接受到信号) 3.不可中断(收 ...

  3. kinux查日志_Linux实时查看日志的四种命令详解

    原标题:Linux实时查看日志的四种命令详解 如何在Linux中实时查看日志文件的内容?那么有很多实用程序可以帮助用户在文件更改或不断更新时输出文件的内容.在Linux中实时显示文件内容的常用命令是t ...

  4. linux如何切换到光盘,怎么刻录cd光盘-Linux切换目录之cd命令详解

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 在Linux cd(切换目录)命令是最重要和最广泛使用 ...

  5. linux paste 变量,Linux下的paste合并命令详解

    paste单词意思是粘贴.该命令主要用来将多个文件的内容合并,与cut命令完成的功能刚好相反. 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同.paste将按行将不同文件行信息放在一 ...

  6. linux中iptables配置文件及命令详解详解

    linux中iptables配置文件及命令详解详解 2018年05月04日 14:23:41 hxpjava1 阅读数 956 linux中iptables配置文件及命令详解详解 iptables配置 ...

  7. linux sort,uniq,cut,wc命令详解

    linux sort,uniq,cut,wc命令详解 sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些 ...

  8. linux cpio(copy in/out) 命令详解

    linux cpio(copy in/out) 命令详解 功能说明:备份文件. 语 法:cpio [-0aABckLovV][-C <输入/输出大小>][-F <备份档>][- ...

  9. python process 函数_Python Process创建进程的2种方法详解

    前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...

最新文章

  1. golang 字符串排序_Golang操作数据库Redis
  2. html css integrity,integrity 属性
  3. 扒一扒搜索引擎是如何工作的?
  4. windows 10 扩大C盘空间
  5. linux7简单应用,centos7下openTSDB简单应用
  6. CentOS下编译64位的libpython2.6.so.1.0库
  7. python入门代码大全-初学python有哪些可以临摹的小段练习代码素材?
  8. Fourier分析基础(二)——由级数导出连续Fourier变换
  9. 22-微信小程序商城 我的订单(微信小程序商城开发、小程序毕业设计、小程序源代码)(黄菊华-微信小程序开发教程)
  10. ulipad.4.1.zip linux,UliPad 使用介绍
  11. 手机数控模拟器安卓版_数控模拟器手机版下载-数控模拟器安卓手机版v1.1.4-河东软件园...
  12. Rainmeter个人使用的插件
  13. 每日一记:2017.7.20
  14. Synonyms 中文近义词工具包 -- 支持文本对齐,推荐算法,相似度计算,语义偏移,关键字提取,概念提取,自动摘要,搜索引擎等
  15. 电脑键盘出现计算机,电脑上出现了键盘怎么办
  16. 用VBA破解Excel密码
  17. PAT(乙级) 1045 快速排序
  18. 最强蜗牛服务器维护祷告攻略,最强蜗牛维护补偿在哪里领取 最强蜗牛维护补偿领取攻略_游戏堡...
  19. Rust 有问有答之 crate 是什么
  20. 【Rust日报】2022-09-13 Stabilize GAT

热门文章

  1. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
  2. 博通Broadcom SDK源码学习与开发8——内存与参数管理
  3. 从零开始搭建仿抖音短视频APP-构建后端项目
  4. SE5_基于YOLO3D的目标检测算法移植与测试
  5. 一种基于卷积神经网络的数据驱动故障诊断方法
  6. 霍尔传感器工作原理简介
  7. 【尖端干货】星域CDN·直播旗舰版三大黑科技浅析
  8. ALSA 配置文件简介
  9. where we come
  10. js验证银行卡号,并自动识别银行信息。js验证手机码。js验证数字