跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Linux使用pkill清理各种服务进程的方法大全

目录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服务器上进行内存分配的

相关文章