问题或需求描述
在shell中,如果你想通过命令行查询出一系列匹配某个关键词的进程,并使用xargs
命令批量结束这些进程,可以按照以下步骤操作:
# 查询并提取进程号
pgrep -f "关键词" | xargs kill# 或者,如果你想使用更强力的kill指令(比如kill -9,即SIGKILL信号,立即结束进程)
pgrep -f "关键词" | xargs kill -9# 如果你想通过进程名而非命令行参数来查找进程,可以去掉-f标志
pgrep "进程名" | xargs kill -9# 如果你要更精确地匹配进程,避免误杀包含关键词的子进程,可以结合grep和awk一起使用,例如:
ps -ef | grep '关键词' | grep -v grep | awk '{print $2}' | xargs kill -9
这里的关键词是你想要匹配的进程的部分或全部名字,pgrep
命令可以根据进程名或命令行参数来查找进程。
实例演示
本地有3个ES的进程,由于是java进程我们直接使用jps查询就可以。
如现有3个进程:
jps
51056 org.elasticsearch.bootstrap.Elasticsearch
49269 org.elasticsearch.bootstrap.Elasticsearch
52633 Jps
49692 org.elasticsearch.bootstrap.Elasticsearch
执行批量关闭:
jps | grep org.elasticsearch.bootstrap.Elasticsearch | awk '{print $1}' | xargs kill -SIGTERM
结果,全部成功关闭。
附录
pgrep命令介绍
pgrep
是一个在 Linux 系统中广泛使用的命令行工具,它是 procps
或 procps-ng
软件包的一部分,通常预装在大多数 Linux 发行版中。pgrep
主要用于查找当前系统中符合条件的正在运行的进程,并输出相应的进程ID(PID)。
命令功能:
pgrep
允许用户根据进程名称、命令行参数、用户名称等多种条件来查找进程。只需提供与进程相关联的模式作为参数,pgrep
就能快速定位到正在运行的对应进程并返回其PID。
基本语法:
pgrep [options] pattern
常用选项:
-f
:模式字符串不仅匹配进程名,还匹配整个命令行。-l
:除了进程ID外,还显示进程的完整命令行。-u
:按照拥有进程的用户名称进行匹配。-x
:精确匹配整个进程名,而不是部分匹配。-n
:只显示最新(最近创建的)的一个匹配进程。-o
:如果多个进程匹配,只显示每个进程的一个PID。
例如,如果你想找出名为 nginx
的所有进程,可以直接运行:
pgrep nginx
如果想精确匹配且仅获取一个PID,则可以这样使用:
pgrep -x nginx
由于 pgrep
结合了正则表达式的强大功能,因此在管理和调试系统进程时非常有用,特别是与 pkill
命令结合使用时,能够方便地终止特定的进程。
jps命令简介
jps
是 Java 平台上一个用于查看当前系统中 Java 虚拟机 (JVM) 运行状态的命令行工具,它是 JDK(Java Development Kit)的一部分,通常位于 JAVA_HOME/bin
目录下。在 Linux 和 Unix 系统中,jps
命令主要用于检查哪些 Java 应用程序正在运行及其相关信息。
命令功能:
jps
命令主要用于列出当前系统中所有的 Java 应用程序进程,并显示它们的进程 ID(PID)以及主类(main class)或包含主类的 JAR 文件名。这对于管理大量基于 Java 的服务尤其有用,因为它可以帮助用户迅速识别和定位正在运行的 Java 进程。
基本语法:
jps [options] [hostid]
常用选项:
-q
:仅显示进程ID,不显示类名或 JAR 名称。-m
:显示启动Java应用时传递给main方法的参数。-l
:输出主类的完整包名或JAR文件全路径名。-v
:显示JVM启动时传递的详细JVM参数。
例如:
-
列出所有Java进程及其主类名称:
jps
-
只显示Java进程的PID:
jps -q
-
显示Java进程的PID以及启动时传递给main方法的参数:
jps -m