首页 > 系统相关 >【Linux】如何用一条命令终止某个后台进程?

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

时间:2024-08-31 13:23:45浏览次数:6  
标签:grep pkill 命令 某个 test kill 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

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


标签:grep,pkill,命令,某个,test,kill,Linux,后台,进程
From: https://blog.51cto.com/musnow/11882766

相关文章

  • 小白学安全:轻松汉化Kali Linux系统
    安装好KALI系统后,很多操作界面是英文的,这对小白来讲,不容易快速上手,因此汉化KALI系统,显得尤为必要!1、执行命令,它用于重新设定系统的区域和语言环境。dpkg-reconfigurelocales2、开始配置......
  • Linux命令
    1、cdxx  去到xx路径下2、cd/   回到根路径3、cd~  切换到用户目录4、cd..  返回上一级目录5、cd../.. 返回上两级目录6、cd~user  进入个人的主目录7、tail-f【日志文件名】实时查看日志8、tail-f-n200【日志文件名】查看日志200行......
  • 后台框架-统一数据格式2
    在上一篇中,当在Controller类中需要返回统一格式的数据时,需要实例化一个R,有时候觉得还是不够简洁,那有没有一种方法Controller中直接返回对象,但是返回的对象统一保存到如下格式的data中?ResponseBodyAdviceResponseBodyAdvice是SpringMVC框架中的一个接口,它允许你在响应......
  • linux查看正在运行的进程
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。在Linux操作系统中,进程是计算机系统中运行的程序的实例。要查看正在运行的进程,可以使用一些命令来显示当前系统中正在运行的任务和进程。其中,是一种流行的Linux发行版,用户可以使用各种命令来管理和监视系统中的进程。在Linux中,常......
  • Linux FTP使用命令
    1、安装ftp客户端yum-yinstallftp2、ftp的用户缺省情况下,ftp服务器和操作系统用户名/密码一样,root用户的权限过大,不允许登录ftp服务器。3、登录服务器方法一:输入ftp服务器ip地址,回车后根据提示输入用户名和密码在这里插入图片描述方法二:输入ftp,用open服务器ip地址,连上服务器后......
  • linux清理 Snapd禁用的软件版本
    Ubuntu内存占满无法运行,花了一下午解决问题,为防止再次发生类似问题,着手清理大文件。刚使用ubuntu1天,Snapd文件已经占用了3G(清理后没有显著效果,从3G->2.5G),因此决定清理,参考:https://www.51cto.com/article/722139.html在snapd所在文件夹打开终端,新建clean_snapd.sh文件sudov......
  • linux卸载anoconda
    一、找到你自己安装Anaconda的目录,删除其文件夹 sudorm-rfpath/anaconda3  二、修改你的配置文件(1)你的配置文件放在用户配置文件:路径:~/.bashrc vim~/.bashrc 删除语句,或者注释语句  exportPATH=path/anaconda3/bin:$PATH (2)你的配置文件在系统文......
  • linux查看目录的权限 设置目录权限
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。在Linux系统中,每个文件和目录都有特定的权限控制,包括读、写和执行权限。这些权限对于保护文件和目录的安全性非常重要,因此在日常使用中,我们经常需要查看文件和目录的权限设置。本文将介绍如何在Linux系统中查看目录的权限,并说明......
  • Linux系统vim编辑器
    Linux系统vim编辑器一,自我介绍二,vim编辑器一,自我介绍大家好,我是繁星点灯光,欢迎来到我的博客!为了复习与分享知识,来巩固自己的学习,我会在csdn上持续分享自己学习的知识点。希望你们喜欢,也欢迎交流。二,vim编辑器vim文件路径如果文件不存在,会编辑新文件如果文件存在......
  • Linux监控&性能调优分析-perf(3)火焰图
    10火焰图(flamegraph)perf火焰图是一种可视化性能分析工具,它通过将性能数据绘制成一个类似火焰的图,直观地展示了程序的调用栈,帮助开发者快速定位性能瓶颈。特点如下:可视化性能数据:火焰图将性能数据映射到一个二维的图中,横轴表示采样时间,纵轴表示调用栈。火焰形状:图中每个矩形代......