delphi pid判断进程结束_Linux kill命令详解:终止进程

kill 从字面来看,就是用来杀死进程的命令,但事实上,这个或多或少带有一定的误导性。从本质上讲,kill 命令只是用来向进程发送一个信号,至于这个信号是什么,是用户指定的。也就是说,kill 命令的执行原理是这样的,kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。kill 命令的基本格式如下:

[root@localhost ~]# kill [信号] PID

kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号,如表 1 所示。

表 1 kill命令常用信号及其含义
信号编号信号名含义
0EXIT 程序退出时收到该信息。
1HUP挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2INT表示结束进程,但并不是强制性的,常用的 "Ctrl+C" 组合键发出就是一个 kill -2 的信号。
3QUIT退出。
9KILL杀死进程,即强制结束进程。
11SEGV 段错误。
15TERM正常结束进程,是 kill 命令的默认信号。

需要注意的是,表中省略了各个信号名称的前缀 SIG,也就是说,SIGTERM 和 TERM 这两种写法都对,kill 命令都可以理解。下面,我们举几个例子来说明一下 kill 命令。【例 1】 标准 kill 命令。

[root@localhost ~】# service httpd start#启动RPM包默认安装的apache服务[root@localhost ~]# pstree -p 丨 grep httpd | grep -v "grep"#查看 httpd 的进程树及 PID。grep 命令査看 httpd 也会生成包含"httpd"关键字的进程,所以使用“-v”反向选择包含“grep”关键字的进程,这里使用 pstree 命令来查询进程,当然也可以使用 ps 和 top 命令|-httpd(2246)-+-httpd(2247)|    |-httpd(2248)|    |-httpd(2249)|    |-httpd(2250)|    |-httpd(2251)[root@localhost ~]# kill 2248#杀死PID是2248的httpd进程,默认信号是15,正常停止#如果默认信号15不能杀死进程,则可以尝试-9信号,强制杀死进程[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"|-httpd(2246>-+-httpd(2247)|    |-httpd(2249)|    |-httpd(2250)|    |-httpd(2251)#PID是2248的httpd进程消失了

【例 2】使用“-1”信号,让进程重启。

[root@localhost ~]# kill -1 2246使用“-1 (数字1)”信号,让httpd的主进程重新启动[root@localhost ~]# pstree -p | grep httpd | grep -v "grep"|-httpd(2246)-+-httpd(2270)|    |-httpd(2271)|    |-httpd(2272)|    |-httpd(2273)|    |-httpd(2274)#子httpd进程的PID都更换了,说明httpd进程已经重启了一次

【例 3】 使用“-19”信号,让进程暂停。

[root@localhost ~]# vi test.sh #使用vi命令编辑一个文件,不要退出[root@localhost ~]# ps aux | grep "vi" | grep -v "grep"root 2313 0.0 0.2 7116 1544 pts/1 S+ 19:2.0 0:00 vi test.sh#换一个不同的终端,查看一下这个进程的状态。进程状态是S(休眠)和+(位于后台),因为是在另一个终端运行的命令[root@localhost ~]# kill -19 2313#使用-19信号,让PID为2313的进程暂停。相当于在vi界面按 Ctrl+Z 快捷键[root@localhost ~]# ps aux | grep "vi" | grep -v "grep"root 2313 0.0 0.2 7116 1580 pts/1 T 19:20 0:00 vi test.sh#注意2313进程的状态,变成了 T(暂停)状态。这时切换回vi的终端,发现vi命令已经暂停,又回到了命令提示符,不过2313进程就会卡在后台。如果想要恢复,可以使用"kill -9 2313”命令强制中止进程,也可以利用后续章节将要学习的工作管理来进行恢复

学会如何使用 kill 命令之后,再思考一个问题,使用 kill 命令一定可以终止一个进程吗?答案是否定的。文章开头说过,kill 命令只是“发送”一个信号,因此,只有当信号被程序成功“捕获”,系统才会执行 kill 命令指定的操作;反之,如果信号被“封锁”或者“忽略”,则 kill 命令将会失效。

032f866c9671affbc9ff4a7806182169.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值