Linux使用pkill清理各种服务进程的方法大全
通过pkill清理不同类型的服务进程需要根据进程特征进行精确匹配。本文介绍各种服务的清理方法1. Java -jar 启动的服务精确匹配特定的jar包123456789# 方法1通过jar包名匹配pkill -fmyapp.jar# 方法2通过主类名匹配pkill -fcom.example.MainClass# 方法3通过应用名匹配在启动时指定# java -Dapp.namemyapp -jar myapp.jarpkill -fapp.namemyapp清理所有Java进程不推荐太暴力123# 谨慎使用会杀掉所有Java进程pkill -9 javapkill -9 javaw2. Redis 二进制启动的服务1234567891011# 方法1通过进程名redis-server通常作为服务名pkill redis-server# 方法2通过配置文件路径如果通过配置文件启动pkill -fredis-server.*/path/to/redis.conf# 方法3通过端口如果固定端口pkill -fredis-server.*:6379# 方法4优雅关闭发送SHUTDOWN信号redis-cli -p 6379shutdown3. Elasticsearch 服务1234567891011121314# 方法1通过ES进程名pkill -f elasticsearch# 方法2通过Java进程的ES特征pkill -forg.elasticsearch.bootstrap.Elasticsearch# 方法3通过PID文件推荐方式if[ -f/var/run/elasticsearch/elasticsearch.pid ];thenkill$(cat/var/run/elasticsearch/elasticsearch.pid)fi# 方法4通过ES的专用停止脚本如果有/path/to/elasticsearch/bin/elasticsearch-d -p pidkill$(catpid)4. Nginx 服务12345678910111213141516# 方法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 ];thenkill$(cat/run/nginx.pid)fi5. 通用的安全清理策略方案1按用户清理如果服务运行在特定用户下12345# 清理www用户的所有进程pkill -u www# 清理特定用户下的Java进程pkill -u appuser -f java方案2按端口清理12345# 清理占用8080端口的进程fuser -k 8080/tcp# 或者使用更直接的方法kill$(lsof-t -i:8080)方案3组合匹配精确清理12345# 清理包含特定关键词的Java进程pkill -fjava.*myapp# 清理除了特定进程外的所有Java进程pgrep -f java |grep-v$(pgrep -fimportant-app) |xargskill6. 封装成脚本的完整方案123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384#!/bin/bash# 文件名service_cleaner.sh# 颜色输出RED\033[0;31mGREEN\033[0;32mYELLOW\033[1;33mNC\033[0mclean_service() {localservice_name$1localpattern$2echo-e${YELLOW}清理 $service_name 服务...${NC}# 查找进程pids$(pgrep -f$pattern)if[ -z$pids];thenecho-e${GREEN}$service_name 服务未运行${NC}return0fi# 显示进程信息echo找到进程: $pidsps-fp $pids |tail-n 2# 发送SIGTERM信号优雅关闭echo发送优雅关闭信号...kill$pids 2/dev/null# 等待最多10秒foriin{1..10};doif! pgrep -f$pattern/dev/null;thenecho-e${GREEN}$service_name 已成功停止${NC}return0fisleep1done# 强制关闭echo强制关闭...kill-9 $pids 2/dev/nullsleep1ifpgrep -f$pattern/dev/null;thenecho-e${RED}警告: 仍有 $service_name 进程在运行${NC}return1elseecho-e${GREEN}$service_name 已强制停止${NC}return0fi}# 清理各种服务echo-e\n${YELLOW} 开始清理服务 ${NC}# Redisclean_serviceRedisredis-server# Elasticsearchclean_serviceElasticsearchorg.elasticsearch.bootstrap.Elasticsearch# Nginxclean_serviceNginxnginx:# Java应用根据实际情况调整模式clean_serviceMyJavaAppmyapp.jarclean_serviceSpringBootspring-boot# 其他端口占用清理echo-e\n${YELLOW} 清理端口占用 ${NC}forportin8080 9200 9300 6379 80 443;dopid$(lsof-t -i:$port 2/dev/null)if[ ! -z$pid];thenecho清理端口 $port 的进程: $pidkill$pid 2/dev/nullfidoneecho-e\n${YELLOW} 最终状态检查 ${NC}psaux |grep-Eredis|elasticsearch|nginx|java.*jar|grep-vgrepecho-e\n${GREEN}清理完成${NC}7. 一键清理所有开发环境服务12345678910111213141516171819202122232425262728293031323334#!/bin/bash# dev_cleanup.sh - 清理开发环境服务# 停止所有服务echo停止所有开发服务...# Docker服务docker-compose down 2/dev/null# Redisredis-clishutdown2/dev/null|| pkill redis-server# Elasticsearchpkill -f elasticsearch# Nginxnginx -s stop 2/dev/null|| pkill nginx# Java服务按特定模式pkill -fjava.*\.jar# 数据库brew services stop mysql 2/dev/null# macOS Homebrewsystemctl stop mysql 2/dev/null# Linux systemd# 检查清理结果echo-e\n剩余相关进程:psaux |grep-Eredis|elastic|nginx|java.*jar|mysql|mongo|grep-vgrep# 清理端口占用echo-e\n释放常用端口...forportin8080 8081 3000 4200 6379 9200 9300 3306 27017;dofuser -k $port/tcp2/dev/nulldone8. 最佳实践建议优先使用专用停止命令123# 优于 pkillnginx -s quitredis-clishutdown创建服务启动/停止脚本123456789# start_services.sh#!/bin/bashnohupjava -jar app.jar app.log 21 redis-server/etc/redis.conf # stop_services.sh#!/bin/bashpkill -fapp.jarredis-clishutdown使用进程管理工具12345# 使用supervisorsudosupervisorctl stop all# 使用systemdsudosystemctl stop nginx redis elasticsearch安全检查后再清理12345# 确认进程psaux |grep-Ejava.*jar|redis|nginx# 确认端口ss -tuln |grep-E:(8080|6379|80)以上就是Linux使用pkill清理各种服务进程的方法大全的详细内容