xiwenAndlejian / my-blog

Java基础学习练习题
1 stars 0 forks source link

Linux 管道 & awk - 杀掉指定名称的进程 #10

Open xiwenAndlejian opened 6 years ago

xiwenAndlejian commented 6 years ago

Linux 管道 & awk - 杀掉指定名称的进程

管道线

|:管道操作符

用法:command1 | command2

作用:command1输出将作为command2输入

示例

# 用 less 查看 /usr/bin 路径下的文件列表
$ ls -l /usr/bin | less
# 查看当前服务器 8080 端口情况
$ netstat -tlpn |grep 8080

Awk

Awk设计语言

下面是一个杀掉当前系统中某个 JAVA 进程的过程

第一步:获取所有运行的 JAVA 进程

执行命令:ps aux |grep java

获得类似如下输出:

user     10028  0.0 15.3 3550848 619128 ?      Sl   Oct09  13:02 java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8911 -jar china-mobile-1.0-SNAPSHOT.jar --server.port=8922 --spring.profiles.active=dev
user     14668  0.0 17.2 3651648 697048 ?      Sl   Sep19  40:12 java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8901 -jar springboot-template-0.0.1.jar --server.port=8090 --spring.profiles.active=server
user     19767  0.1  4.8 2708564 195100 ?      Sl   Oct02  29:03 java -Xms256m -Xmx256m -Dfile.encoding=UTF-8 -jar profit-latest.jar --app.env=prod
user     26139  0.0  0.0  11760  2156 pts/3    S+   22:42   0:00 grep --color=auto java
user     26353  0.6  5.8 2563476 236024 ?      Sl   Sep25 212:58 java -Xms128m -Xmx128m -Dfile.encoding=UTF-8 -jar tale-least.jar

第二步:使用 awk 获取进程 pid

进一步获取上一步输出中springboot-template-0.0.1.jarpid

首先明确搜索springboot-template-0.0.1.jar

对上一步命令进行增加:ps aux |grep java|grep springboot-template-0.0.1.jar

此时执行结果:

user     14668  0.0 17.2 3651648 697048 ?      Sl   Sep19  40:12 java -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8901 -jar springboot-template-0.0.1.jar --server.port=8090 --spring.profiles.active=server

此时数据只有一行,我们需要通过awk获取第二列(pid)的值

进一步修改命令:ps aux |grep java|grep springboot-template-0.0.1.jar|awk '{print $2}'

执行结果:

14668

第三步:杀掉指定进程

杀掉进程的命令kill -9

按照之前的步骤,将命令修改为如下:ps aux |grep java|grep springboot-template-0.0.1.jar|awk '{print $2}'|kill -9

但是这个命令实际是无法执行的,因为kill -9 没有获取到上一步中的输出作为它的参数,因此需要使用xargs

Xargs

xargs:可以将管道或者标准输入(stdin)数据转换成命令参数,也能从文件的输出中读取数据。可以捕获另一个命令的输出,传递给另一个(下一个)命令

因此实际能执行的命令:ps aux |grep java|grep springboot-template-0.0.1.jar|awk '{print $2}'|xargs kill -9

这样执行之后就能杀掉指定名称的进程了。