目录1. Java -jar 启动的服务
精确匹配特定的jar包:
清理所有Java进程(不推荐,太暴力):2. Redis 二进制启动的服务3. Elasticsearch 服务4. Nginx 服务
5. 通用的安全清理策略
方案1:按用户清理(如果服务运行在特定用户下)
方案2:按端口清理方案3:组合匹配,精确清理
6. 封装成脚本的完整方案
7. 一键清理所有开发环境服务
8. 最佳实践建议
通过pkill清理不同类型的服务进程需要根据进程特征进行精确匹配。本文介绍各种服务的清理方法:1. Java -jar 启动的服务
精确匹配特定的jar包:
# 方法1:通过jar包名匹配pkill -f 'myapp.jar'
# 方法2:通过主类名匹配pkill -f 'com.example.MainClass'
# 方法3:通过应用名匹配(在启动时指定)
# java -Dapp.name=myapp -jar myapp.jar pkill -f 'app.name=myapp'清理所有Java进程(不推荐,太暴力):# 谨慎使用!会杀掉所有Java进程pkill -9 java pkill -9 javaw2. Redis 二进制启动的服务# 方法1:通过进程名(redis-server通常作为服务名)
pkill redis-server
# 方法2:通过配置文件路径(如果通过配置文件启动)
pkill -f 'redis-server.*/path/to/redis.conf'
# 方法3:通过端口(如果固定端口)
pkill -f 'redis-server.*:6379'
# 方法4:优雅关闭(发送SHUTDOWN信号)
redis-cli -p 6379 shutdown3. Elasticsearch 服务# 方法1:通过ES进程名pkill -f elasticsearch
# 方法2:通过Java进程的ES特征pkill -f 'org.elasticsearch.bootstrap.Elasticsearch'
# 方法3:通过PID文件(推荐方式)
if [ -f /var/run/elasticsearch/elasticsearch.pid ]; then kill $(cat /var/run/elasticsearch/elasticsearch.pid) fi
# 方法4:通过ES的专用停止脚本(如果有)
/path/to/elasticsearch/bin/elasticsearch -d -p pid kill $(cat pid)4. Nginx 服务# 方法1:优雅停止(推荐)
nginx -s quit
# 方法2:快速停止nginx -s stop
# 方法3:使用pkill(根据进程名)
pkill nginx
# 方法4:杀掉master和worker进程pkill -9 nginx
# 方法5:通过PID文件if [ -f /run/nginx.pid ]; then kill $(cat /run/nginx.pid) fi
5. 通用的安全清理策略
方案1:按用户清理(如果服务运行在特定用户下)
# 清理www用户的所有进程pkill -u www
# 清理特定用户下的Java进程pkill -u appuser -f java方案2:按端口清理# 清理占用8080端口的进程fuser -k 8080/tcp
# 或者使用更直接的方法kill $(lsof -t -i:8080)
方案3:组合匹配,精确清理# 清理包含特定关键词的Java进程pkill -f 'java.*myapp'
# 清理除了特定进程外的所有Java进程pgrep -f java | grep -v $(pgrep -f 'important-app') | xargs kill
6. 封装成脚本的完整方案
#!/bin/bash# 文件名:service_cleaner.sh
# 颜色输出RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'NC='\033[0m'
clean_service() {local service_name=$1 local pattern=$2
echo -e "${YELLOW}清理 $service_name 服务...${NC}"
# 查找进程pids=$(pgrep -f "$pattern")
if [ -z "$pids" ]; then echo -e "${GREEN}$service_name 服务未运行${NC}"return 0 fi
# 显示进程信息echo "找到进程: $pids"ps -fp $pids | tail -n +2
# 发送SIGTERM信号(优雅关闭)
echo "发送优雅关闭信号..."kill $pids 2>/dev/null
# 等待最多10秒for i in {1..10}; do if ! pgrep -f "$pattern" > /dev/null; then echo -e "${GREEN}$service_name 已成功停止${NC}"return 0 fi sleep 1 done
# 强制关闭echo "强制关闭..."kill -9 $pids 2>/dev/null sleep 1
if pgrep -f "$pattern" > /dev/null; then echo -e "${RED}警告: 仍有 $service_name 进程在运行${NC}"return 1 else echo -e "${GREEN}$service_name 已强制停止${NC}"return 0 fi}
# 清理各种服务echo -e "\n${YELLOW}=== 开始清理服务 ===${NC}"
# Redis clean_service "Redis" "redis-server"
# Elasticsearch clean_service "Elasticsearch" "org.elasticsearch.bootstrap.Elasticsearch"
# Nginx clean_service "Nginx" "nginx:"
# Java应用(根据实际情况调整模式)
clean_service "MyJavaApp" "myapp.jar"clean_service "SpringBoot" "spring-boot"
# 其他端口占用清理echo -e "\n${YELLOW}=== 清理端口占用 ===${NC}"for port in 8080 9200 9300 6379 80 443; do pid=$(lsof -t -i:$port 2>/dev/null) if [ ! -z "$pid" ]; then echo "清理端口 $port 的进程: $pid"kill $pid 2>/dev/null fi done
echo -e "\n${YELLOW}=== 最终状态检查 ===${NC}"ps aux | grep -E 'redis|elasticsearch|nginx|java.*jar' | grep -v grep
echo -e "\n${GREEN}清理完成!${NC}"
7. 一键清理所有开发环境服务
#!/bin/bash# dev_cleanup.sh - 清理开发环境服务
# 停止所有服务echo "停止所有开发服务..."
# Docker服务docker-compose down 2>/dev/null
# Redis redis-cli shutdown 2>/dev/null || pkill redis-server
# Elasticsearch pkill -f elasticsearch
# Nginx nginx -s stop 2>/dev/null || pkill nginx
# Java服务(按特定模式)
pkill -f 'java.*\.jar'
# 数据库brew services stop mysql 2>/dev/null # macOS Homebrew systemctl stop mysql 2>/dev/null # Linux systemd
# 检查清理结果echo -e "\n剩余相关进程:"ps aux | grep -E 'redis|elastic|nginx|java.*jar|mysql|mongo' | grep -v grep
# 清理端口占用echo -e "\n释放常用端口..."for port in 8080 8081 3000 4200 6379 9200 9300 3306 27017; do fuser -k $port/tcp 2>/dev/null done
8. 最佳实践建议
优先使用专用停止命令:# 优于 pkill nginx -s quit redis-cli shutdown创建服务启动/停止脚本:# start_services.sh#!/bin/bash nohup java -jar app.jar > app.log 2>&1 &redis-server /etc/redis.conf &
# stop_services.sh#!/bin/bash pkill -f 'app.jar'redis-cli shutdown使用进程管理工具:# 使用supervisor sudo supervisorctl stop all
# 使用systemd sudo systemctl stop nginx redis elasticsearch安全检查后再清理:# 确认进程ps aux | grep -E 'java.*jar|redis|nginx'
# 确认端口ss -tuln | grep -E ':(8080|6379|80)'以上就是Linux使用pkill清理各种服务进程的方法大全的详细内容,更多关于Linux pkill清理各种服务进程的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:linux服务器查看进程、线程数量方式linux守护进程服务daemon、nohup、systemd的区别Linux服务器进程退出了,但是显存占用问题的解决linux 系统进程管理工具systemd详解(systemctl命令、创建自己的systemd服务) java 进程是如何在Linux服务器上进行内存分配的
