当前位置: 首页 > article >正文

【Linux】如何用一条命令终止某个后台进程?

在面试的时候被问道了这个问题,之前还从来没有了解过

1.怎么终止某个进程?

如果你学过Linux下的信号处理,这个问题应该不难答。在Linux下,使用kill命令发送信号给进程,其中9号信号SIGKILL就可以将进程终止。

还有很多其他信号也能终止进程,比如前台进程使用CTRL+C会发送2号信号,也能终止进程。但是9号信号是不能被自定义捕获的,进程收到9号信号后一定会被终止。

后台进程就需要我们知道这个进程的名字,然后查询这个进程的PID,再用kill发送信号将其终止。在之前我都是用下面这两个命令来处理的

ps jax | grep 进程名 | grep -v grep
kill -9 进程PID

现在的问题就变成了,如何将这两条命令变成一条命令?

2.如何用一条命令终止后台进程?

2.1 pkill/killall

在Linux下除了kill命令,还有这两个命令,他们可以通过传入进程名字来删除某个进程

pkill 进程名
killall 进程名

如下所示,我用c语言写了个死循环的程序,并让其后台运行。

❯ ./test &
[1] 2578

随后,可以使用pkill命令直接终止这个程序

❯ ps jax | grep test | grep -v grep
   2265    2578    2578    2265 pts/5       3337 SN    1000   0:00 ./test
❯ pkill test                       
[1]  + 2578 terminated  ./test

killall命令也是同理,需要注意的是,如果有两个同名的进程,这两个进程都会被终止。

❯ killall test
[1]  - 7309 terminated  ./test
[2]  + 7327 terminated  ./test

pkill和killall的区别在于,pkill是用正则捕获的方式来查询某个进程的,即输入test,实际上会删除所有进程名中包含test的进程。而killall则是完全捕获,必须是名字为test的进程才会被删除。

如下所示,使用pkill est命令,同样会删除test进程。

❯ pkill est                        
[1]  + 7664 terminated  ./test

而killall则不会,会显示该进程名找不到对应进程。

❯ killall est 
est: no process found

2.2 ps+kill+管道

因为没有接触过上面的pkill命令,所以我当时面试的时候只能想到通过管道的方式来查询进程PID并将其传给kill命令。不过因为对linux下命令行的管道了解的并不多,具体怎么写命令也说不出来。

我们知道,使用ps命令的时候,显示的数据中第二列是该进程的PID,第一列是父进程的PID。即我们需要想办法把这个结果中第二列的值给取出来。

❯ ps jax | grep test | grep -v grep                          
   2265    9356    9356    2265 pts/5       9450 SN    1000   0:00 ./test

使用awk命令就能做到这一点,从匹配的行中取出第二列,即得到了我们需要的进程PID。

❯ ps jax | grep test | grep -v grep | awk '{print $2}'
9356

现在要做的就是用$号将这个命令的结果传给kill命令,这样就实现了用一条命令终止进程了。

❯ kill -9 $(ps jax | grep test | grep -v grep | awk '{print $2}')
[1]  + 9356 killed     ./test  

The end

有其他办法,欢迎在评论区交流!


http://www.kler.cn/a/281711.html

相关文章:

  • 高阶C语言之六:程序环境和预处理
  • 深度学习之目标检测的技巧汇总
  • 详细分析ipvsadm负载均衡的命令
  • 代码随想录算法训练营第五十一天|Day51 图论
  • 【python】Bokeh 与 Plotly:创建交互式数据可视化工具
  • 【c++丨STL】list的使用
  • AI学习记录 - 模型训练中怎么反向传播以及学习率的影响
  • CSS 的font-synthesis属性与中文体验增强
  • 手机号码归属地查询如何用PHP进行调用
  • zoom 会议 javascript 转录例子
  • 第四十篇-TeslaP40+Ollama+Ollama-WebUI(自编译)
  • Python-MNE-源定位和逆问题01:源估计(SourceEstimate)数据结构
  • Nginx 部署前端 Vue 项目全攻略
  • Spring WebFlux – CVE-2023-34034 – 撰写和概念验证
  • Jmeter下载、配置环境变量
  • 【vue3】wangEditor 5在vue3中的使用
  • 【KDD2024】大数据基础工程技术集群异常检测论文入选
  • 【netty系列-08】深入Netty组件底层原理和基本实现
  • stable-diffusion-webui 部署 ,启用 api 服务
  • TPM管理培训究竟需要多少天?完整攻略在此
  • 光伏设计中组串逆变和微型逆变是什么意思?有什么区别?
  • 433 国乒启发式:一切方法的尽头都是本能反应
  • 提升广告效果:Facebook广告投放步骤与实用工具解析
  • GraphRAG论文阅读笔记
  • 构建开发全能型档期预约系统
  • spring整合redis(常用数据类型操作)