linux shell脚本关闭指定端口号的进程

关闭指定进程中关键词的进程,最好找一个唯一标识 例如:项目名称 等等

一、管道方式
1. 关闭指定程序进程号
#1.关闭指定程序的进程
ps -ef | grep java | grep -v grep | cut -c 9-15 | xargs kill -9

注:如果是以程序来关闭的场景,这一种仅限于该java程序只启动了一个

#2.关闭指定端口号的进程(推荐使用)
ps -ef | grep 8080 | grep -v grep | cut -c 9-15 | xargs kill -9

#3.关闭指定进程中关键词的进程
ps -ef | grep demo-0.0.1-SNAPSHOT | grep -v grep | cut -c 9-15 | xargs kill -9

注:采用进程中唯一标识关闭的进程即可
2. 关闭指定端口号的进程(推荐使用)
#2.关闭指定端口号的进程(推荐使用)
ps -ef | grep 8080 | grep -v grep | cut -c 9-15 | xargs kill -9

#3.关闭指定进程中关键词的进程
ps -ef | grep demo-0.0.1-SNAPSHOT | grep -v grep | cut -c 9-15 | xargs kill -9

注:采用进程中唯一标识关闭的进程即可
3. 关闭指定进程关键词的进程(推荐使用)
#3.关闭指定进程中关键词的进程
ps -ef | grep demo-0.0.1-SNAPSHOT | grep -v grep | cut -c 9-15 | xargs kill -9

注:其实1/2/3都属于一种,采用进程中唯一标识关闭的进程即可

在这里插入图片描述

4. 操作记录
[cmiip@localhost ~]$ ps -ef |grep java
cmiip     12293      1  7 20:54 pts/2    00:00:29 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8080
cmiip     12404  12096  8 20:55 pts/2    00:00:25 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8082
cmiip     12440  12096 12 20:55 pts/2    00:00:36 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8083
cmiip     12456  12096 12 20:55 pts/2    00:00:36 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8084
cmiip     12472  12096 12 20:56 pts/2    00:00:36 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8085
cmiip     12581  12096  0 21:00 pts/2    00:00:00 grep --color=auto java
[cmiip@localhost ~]$ ps -ef |grep 8080
cmiip     12293      1  7 20:54 pts/2    00:00:29 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8080
cmiip     12596  12096  0 21:01 pts/2    00:00:00 grep --color=auto 8080
[cmiip@localhost ~]$ ps -ef | grep 8080 | grep -v grep | cut -c 9-15 | xargs
12293
[cmiip@localhost ~]$ ps -ef | grep 8080 | grep -v grep | cut -c 9-15 | xargs kill -9 
[cmiip@localhost ~]$ ps -ef |grep java
cmiip     12404  12096  7 20:55 pts/2    00:00:25 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8082
cmiip     12440  12096 10 20:55 pts/2    00:00:36 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8083
cmiip     12456  12096 11 20:55 pts/2    00:00:36 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8084
cmiip     12472  12096 11 20:56 pts/2    00:00:36 java -jar demo-0.0.1-SNAPSHOT.jar --server.port=8085
cmiip     12610  12096  0 21:01 pts/2    00:00:00 grep --color=auto java
[cmiip@localhost ~]$
5. 知识补充
说明:管道符“|”用来隔开两个命令,管道符左边命令的输出会作为管道符右边命令的输入。 

  “ps -ef” 查看所有进程
  “grep -v grep” 是在列出的进程中去除含有关键字“grep”的进程。
  “cut -c 9-15” 是截取输入行的第9个字符到第15个字符,而这正好是进程号PID。
  “xargs kill -9” 中的xargs命令是用来把前面命令的输出结果(PID)
  作为“kill -9”命令的参数,并执行该命令。
  “kill -9”会强行杀掉指定进程,这样就成功清除了同名进程。
二、jps方式
2.1. 使用场景说明

如果服务器上启动着不同的应用或者软件或者中间件可以使用此种方式;如果一种程序启动多个推荐使用第一种方案。

2.2. 不同程序不同进程
jps | grep 'Elasticsearch' | awk -F ' ' '{print $1}' | xargs kill -9

因为jps输出结果的形式是’进程号 进程名称’,所以这里awk命令以空格切分,取第一个元素(即进程号),然后输入到xargs即可.

三、管道另一种方式
3.1. 脚本编写思路
1 netstat -nlp 查看占用端口号的服务
2 找到该端口号的进程
3 找到该进程id
4 kill它
3.2. 查看占用端口号的服务
[cmiip@localhost ~]$ netstat -nlp

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                   
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      -                   
tcp6       0      0 :::8082                 :::*                    LISTEN      12404/java          
tcp6       0      0 :::8083                 :::*                    LISTEN      12440/java          
tcp6       0      0 :::8084                 :::*                    LISTEN      12456/java          
tcp6       0      0 :::8085                 :::*                    LISTEN      12472/java          
tcp6       0      0 :::21                   :::*                    LISTEN      -                   
tcp6       0      0 :::22                   :::*                    LISTEN      -                   
tcp6       0      0 ::1:25                  :::*                    LISTEN      -                   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           -                   
raw6       0      0 :::58                   :::*                    7           -
3.3. 筛选看规律

可以用grep筛选一下,看看规律,找到有 :3306 的一行就好
用管道符给grep处理:

[cmiip@localhost ~]$ netstat -nlp | grep :8082
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp6       0      0 :::8082                 :::*                    LISTEN      12404/java  

既然取出一行了,那就容易了,再筛选一下,用awk分割取出其中一个
3.4. 读取出端口号
[cmiip@localhost ~]$ netstat -nlp | grep :8082 | awk '{print $7}'
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
12404/java
[cmiip@localhost ~]$
意思是取第七个字段,这里默认应该是用tab字符分割的,已经读取出来了,但是还得拿到/前面的数字
3.5. 分割处理

取/前面的数字就可以了,这里还是可以用awk处理

[cmiip@localhost ~]$ netstat -nlp | grep :8082 | awk '{print $7}' | awk -F"/" '{ print $1 }'
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
12404
[cmiip@localhost ~]$

意思是用/符号分割,取第一部分
3.6. 然后把这个数字传给kill就可以

需要用到"`"操作符,它可以执行一个语句,这个可以如此执行:

 kill -9 `netstat -nlp | grep :8082 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
操作记录:
[cmiip@localhost ~]$ kill -9 `netstat -nlp | grep :8082 | awk '{print $7}' | awk -F"/" '{ print $1 }'`
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
[cmiip@localhost ~]$ netstat -nlp | grep :8082 | awk '{print $7}'
[cmiip@localhost ~]$
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

gblfy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值