kill命令详解_linux杀死进程kill

kill命令详解_linux杀死进程kill大多数人对kill命令的理解就是杀死一个进程,而这仅仅是kill的一个功能。Kill的zhenshkill用途是向一个进程发送信号,而杀死一个进程仅仅是其中的一个功能。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

绝大多数人对 kill 命令的理解就是结束一个进程,除了这个 kill 其实还有其它的功能。

kill 的作用是向一个进程发送指定信号,而不仅仅是结束一个进程哦!

接下来让我们详细的看看 kill 的具体功能。

一、常用参数

语法格式:

    kill [参数] <进程ID> […]

常用参数如下:

-l, –list [信号] :列出信号名称;

– , -s, –signal <信号> :指定要发送的信号;

二、实例

2.1 -l 参数

参数后不带信号会列出所有可用信号,如下所示:

linuxy@linuxy:~$ 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
linuxy@linuxy:~$

Jetbrains全家桶1年46,售后保障稳定

接下来看下加了信号的情况,如下所示:

linuxy@linuxy:~$ kill -l 9
KILL
linuxy@linuxy:~$ kill -l 8
FPE
linuxy@linuxy:~$

列出了对应信号的名称,但是去掉了前缀 SIG。

-l 参数也可以根据信号名称列出代表的数字,如下所示:

linuxy@linuxy:~$ kill -l 9
KILL
linuxy@linuxy:~$ kill -l KILL
9
linuxy@linuxy:~$ kill -l SIGKILL
9
linuxy@linuxy:~$

2.2 -s 参数

将信号发送给进程,信号可以是名称或数字,我们常用的是直接 “- 信号” 的形式,而很少用 -s 参数。

注意:“-信号”中的信号可以是数字/信号名称/不带前缀SIG的名称

为了进程测试,我们启动了一个程序 kill-test ,进程号为 3756,如下所示:

linuxy@linuxy:~$ ps -ef | grep kill-test
linuxy      3756    2577  0 22:39 pts/1    00:00:00 ./kill-test
linuxy      3769    2577  0 22:40 pts/1    00:00:00 grep --color=auto kill-test
linuxy@linuxy:~$

先尝试不带参数,直接 kill pid,如下所示:

linuxy@linuxy:~$ kill 3756
linuxy@linuxy:~$ ps -ef | grep kill-test
linuxy      3756    2577  0 22:39 pts/1    00:00:00 ./kill-test
linuxy      3788    2577  0 22:44 pts/1    00:00:00 grep --color=auto kill-test
linuxy@linuxy:~$

可以看到程序还在,为什么呢?

在不带参数情况下,kill 默认发送 TERM 信号到指定进程,TERM 是终止进程信号,程序没有被结束的原因是程序捕获了该信号,当然,可以杀死不能捕获该信号的进程。

那么,对于第一种情况就需要使用 SIGKILL 信号来强制结束进程,如下所示:

linuxy@linuxy:~$ kill -9 3756
linuxy@linuxy:~$ ps -ef | grep kill-test
linuxy      4104    2577  0 22:57 pts/1    00:00:00 grep --color=auto kill-test
[1]+  已杀死               ./kill-test
linuxy@linuxy:~$

以下使用不同的 “-信号” 形式来结束一个进程,下面是不加 SIG 前缀的情况,如下所示:

linuxy@linuxy:~$ ps -ef | grep kill-test
linuxy      4192    4162  0 23:14 pts/2    00:00:00 ./kill-test
linuxy      4199    4162  0 23:14 pts/2    00:00:00 grep --color=auto kill-test
linuxy@linuxy:~$ kill -KILL 4192
linuxy@linuxy:~$ ps -ef | grep kill-test
linuxy      4204    4162  0 23:15 pts/2    00:00:00 grep --color=auto kill-test
[1]+  已杀死               ./kill-test
linuxy@linuxy:~$

 下面是添加 SIG 前缀的情况,如下所示:

linuxy@linuxy:~$ ps -ef | grep kill-test
linuxy      4224    4162  0 23:16 pts/2    00:00:00 ./kill-test
linuxy      4228    4162  0 23:16 pts/2    00:00:00 grep --color=auto kill-test
linuxy@linuxy:~$ kill -SIGKILL 4224
linuxy@linuxy:~$ ps -ef | grep kill-test
linuxy      4235    4162  0 23:17 pts/2    00:00:00 grep --color=auto kill-test
[1]+  已杀死               ./kill-test
linuxy@linuxy:~$

其它一些常见信号:

SIGHUP :   当 SIGHUP 信号发送给一些守护程序,例如:Apache 和 Sendmail ,在接收到 SIGHUP 信号时会重新读取配置文件;

SIGCHLD : 在一个进程终止或停止时,SIGCHLD 信号被发送给父进程;

SIGCONT : 该信号发送给需要继续运行,但当前处于停止状态的进程;

SIGGIO : 表示一个异步 IO 事件;

SIGSTOP : 这是一个作业控制信号,用于停止一个进程;

注意:除了 SIGKILL 和 SIGSTOP 信号之外,其它的信号都可以被进程所捕获。

三、总结

在我们日常使用过程中,最常用的便是 SIGTERM 和 SIGKILL 信号来结束一个进程,这两个信号的区别是,SIGTERM 信号让程序在结束之前可以做好清理工作,SIGKILL 是强制结束一个进程,该信号不能被捕获或忽略掉,但是要有对应权限哦!其它信号很少在实际操作中使用到。

参考文献:

[1] Ubuntu man 手册

[2] https://en.wikipedia.org/wiki/Kill_(command)

[3] UNIX环境高级编程

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/210078.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux文件—文件锁

    Linux文件—文件锁通过之前的open()/close()/read()/write()/lseek()函数已经可以实现文件的打开、关闭、读写等基本操作,但是这些基本操作是不够的。对于文件的操作而言,“锁定”操作是对文件(尤其是对共享文件)的一种高级的文件操作。当某进程在更新文件内数据时,期望某种机制能防止多个进程同时更新文件从而导致数据丢失,或者防止文件内容在未更新完毕时被读取并引发后续问题,这种机制就是“文件锁”。

    2022年6月28日
    51
  • NTP时间服务器简介

    NTP(NetworkTimeProtocol)网络时间协议,工作在UDP的123端口上。是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(局域网上与标准间差小于1毫秒,互联网上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。NTP服务器NTP服务器提供准确时间,首先要有准确的时间来源,这一时间…

    2022年4月9日
    56
  • pd.notnull

    pd.notnull

    2022年6月10日
    29
  • 用数据说话,外贸B2C产品选择(上篇)-热门搜索法

    用数据说话,外贸B2C产品选择(上篇)-热门搜索法

    2022年1月30日
    56
  • 数模笔记(五):变异系数法

    数模笔记(五):变异系数法数模笔记(一):线性规划、整数规划及非线性规划数模笔记(二):层次分析法数模笔记(三):灰色系统分析方法数模笔记(四):插值与拟合一、原理若某项指标的数值差异较大,能明确区分开各被评价对象,说明该指标的分辨信息丰富,因而应给该指标以较大的权重;反之,若各个被评价对象在某项指标上的数值差异较小,那么这项指标区分各评价对象的能力较弱,因而应给该指标较小的权重。因为方差可以描述取值的离散程度,即某指标的方差反映了该指标的的分辨能力,所以可用方差定义指标的…

    2022年6月8日
    64
  • Linux dstat 监控工具[通俗易懂]

    Linux dstat 监控工具[通俗易懂]简述dstat是一个可以取代vmstat,iostat,netstat和ifstat这些命令的多功能产品。dstat克服了这些命令的局限并增加了一些另外的功能,增加了监控项,也变得更灵活了。dstat可以很方便监控系统运行状况并用于基准测试和排除故障。dstat可以让你实时地看到所有系统资源,例如,你能够通过统计IDE控制器当前状态来比较磁盘利用率,或者直接通过网络带宽数值来比较磁盘…

    2022年6月18日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号