关闭指定进程中关键词的进程,最好找一个唯一标识 例如:项目名称 等等
文章目录
- 一、管道方式
 - 1. 关闭指定程序进程号
 - 2. 关闭指定端口号的进程(推荐使用)
 - 3. 关闭指定进程关键词的进程(推荐使用)
 - 4. 操作记录
 - 5. 知识补充
 
- 二、jps方式
 - 2.1. 使用场景说明
 - 2.2. 不同程序不同进程
 
- 三、管道另一种方式
 - 3.1. 脚本编写思路
 - 3.2. 查看占用端口号的服务
 - 3.3. 筛选看规律
 - 3.4. 读取出端口号
 - 3.5. 分割处理
 - 3.6. 然后把这个数字传给kill就可以
 
一、管道方式
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 -nlptcp        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 infowill 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 infowill 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 infowill 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 infowill not be shown, you would have to be root to see it all.)
[cmiip@localhost ~]$ netstat -nlp | grep :8082 | awk '{print $7}'
[cmiip@localhost ~]$