news 2026/3/21 22:04:25

Linux shell 脚本示例:使用 pkill 清理各种服务进程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux shell 脚本示例:使用 pkill 清理各种服务进程

通过pkill清理不同类型的服务进程需要根据进程特征进行精确匹配。本文介绍各种服务的清理方法:

1. Java -jar 启动的服务

精确匹配特定的jar包:

# 方法1:通过jar包名匹配pkill-f'myapp.jar'# 方法2:通过主类名匹配pkill-f'com.example.MainClass'# 方法3:通过应用名匹配(在启动时指定)# java -Dapp.name=myapp -jar myapp.jarpkill-f'app.name=myapp'

清理所有Java进程(不推荐,太暴力):

# 谨慎使用!会杀掉所有Java进程pkill-9 javapkill-9 javaw

2. Redis 二进制启动的服务

# 方法1:通过进程名(redis-server通常作为服务名)pkillredis-server# 方法2:通过配置文件路径(如果通过配置文件启动)pkill-f'redis-server.*/path/to/redis.conf'# 方法3:通过端口(如果固定端口)pkill-f'redis-server.*:6379'# 方法4:优雅关闭(发送SHUTDOWN信号)redis-cli -p6379shutdown

3. Elasticsearch 服务

# 方法1:通过ES进程名pkill-f elasticsearch# 方法2:通过Java进程的ES特征pkill-f'org.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 服务

# 方法1:优雅停止(推荐)nginx -s quit# 方法2:快速停止nginx -s stop# 方法3:使用pkill(根据进程名)pkillnginx# 方法4:杀掉master和worker进程pkill-9 nginx# 方法5:通过PID文件if[-f /run/nginx.pid];thenkill$(cat/run/nginx.pid)fi

5. 通用的安全清理策略

方案1:按用户清理(如果服务运行在特定用户下)

# 清理www用户的所有进程pkill-u www# 清理特定用户下的Java进程pkill-u appuser -f java

方案2:按端口清理

# 清理占用8080端口的进程fuser-k8080/tcp# 或者使用更直接的方法kill$(lsof-t -i:8080)

方案3:组合匹配,精确清理

# 清理包含特定关键词的Java进程pkill-f'java.*myapp'# 清理除了特定进程外的所有Java进程pgrep -f java|grep-v$(pgrep -f'important-app')|xargskill

6. 封装成脚本的完整方案

#!/bin/bash# 文件名:service_cleaner.sh# 颜色输出RED='\033[0;31m'GREEN='\033[0;32m'YELLOW='\033[1;33m'NC='\033[0m'clean_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"找到进程:$pids"ps-fp$pids|tail-n +2# 发送SIGTERM信号(优雅关闭)echo"发送优雅关闭信号..."kill$pids2>/dev/null# 等待最多10秒foriin{1..10};doif!pgrep -f"$pattern">/dev/null;thenecho-e"${GREEN}$service_name已成功停止${NC}"return0fisleep1done# 强制关闭echo"强制关闭..."kill-9$pids2>/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_service"Redis""redis-server"# Elasticsearchclean_service"Elasticsearch""org.elasticsearch.bootstrap.Elasticsearch"# Nginxclean_service"Nginx""nginx:"# Java应用(根据实际情况调整模式)clean_service"MyJavaApp""myapp.jar"clean_service"SpringBoot""spring-boot"# 其他端口占用清理echo-e"\n${YELLOW}=== 清理端口占用 ===${NC}"forportin808092009300637980443;dopid=$(lsof-t -i:$port2>/dev/null)if[!-z"$pid"];thenecho"清理端口$port的进程:$pid"kill$pid2>/dev/nullfidoneecho-e"\n${YELLOW}=== 最终状态检查 ===${NC}"psaux|grep-E'redis|elasticsearch|nginx|java.*jar'|grep-vgrepecho-e"\n${GREEN}清理完成!${NC}"

7. 一键清理所有开发环境服务

#!/bin/bash# dev_cleanup.sh - 清理开发环境服务# 停止所有服务echo"停止所有开发服务..."# Docker服务docker-compose down2>/dev/null# Redisredis-clishutdown2>/dev/null||pkillredis-server# Elasticsearchpkill-f elasticsearch# Nginxnginx -s stop2>/dev/null||pkillnginx# Java服务(按特定模式)pkill-f'java.*\.jar'# 数据库brew services stop mysql2>/dev/null# macOS Homebrewsystemctl stop mysql2>/dev/null# Linux systemd# 检查清理结果echo-e"\n剩余相关进程:"psaux|grep-E'redis|elastic|nginx|java.*jar|mysql|mongo'|grep-vgrep# 清理端口占用echo-e"\n释放常用端口..."forportin8080808130004200637992009300330627017;dofuser-k$port/tcp2>/dev/nulldone

8. 最佳实践建议

  1. 优先使用专用停止命令

    # 优于 pkillnginx -s quit redis-clishutdown
  2. 创建服务启动/停止脚本

    # start_services.sh#!/bin/bashnohupjava -jar app.jar>app.log2>&1&redis-server /etc/redis.conf&# stop_services.sh#!/bin/bashpkill-f'app.jar'redis-clishutdown
  3. 使用进程管理工具

    # 使用supervisorsudosupervisorctl stop all# 使用systemdsudosystemctl stop nginx redis elasticsearch
  4. 安全检查后再清理

    # 确认进程psaux|grep-E'java.*jar|redis|nginx'# 确认端口ss -tuln|grep-E':(8080|6379|80)'
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/21 15:11:34

2.5D插件让PS秒变3D场景设计工具

Hunyuan-MT-7B-WEBUI:把顶尖翻译能力装进浏览器的一键工具 在跨境直播带货的直播间里,一位新疆的电商运营正将汉语商品描述实时翻译成哈萨克语;高校实验室中,研究生一键导出论文摘要的英文版本用于国际投稿;某出海企业…

作者头像 李华
网站建设 2026/3/18 14:18:35

Open-AutoGLM核心组件拆解:9个关键技术点决定系统成败

第一章:Open-AutoGLM总体框架Open-AutoGLM 是一个面向自动化自然语言处理任务的开源框架,专为构建、优化和部署基于 GLM 架构的大语言模型应用而设计。该框架整合了任务解析、提示工程、模型调度与结果评估四大核心模块,支持用户以声明式方式…

作者头像 李华
网站建设 2026/3/15 9:29:36

计算机Java毕设实战-基于springboot的高校学生住宿管理系统 学生公寓系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/21 7:26:13

Deep Research完全指南:从RAG到AI自主研究的技术进化!

导语 如果AI的终极使命是拓展人类认知的边界,那么“研究”——这项系统性探索未知的核心活动,无疑是其最重要的试金石。2024年,AI Agent技术迎来突破性进展,一个名为 Deep Research(深度研究) 的方向正以前…

作者头像 李华
网站建设 2026/3/15 10:02:41

Open-AutoGLM如何安全加载外部应用?资深架构师透露4条黄金规则

第一章:Open-AutoGLM如何安全加载外部应用?资深架构师的思考在构建基于 Open-AutoGLM 的智能系统时,如何安全地集成和加载外部应用程序成为架构设计中的关键挑战。作为资深架构师,必须在功能扩展与系统安全之间取得平衡&#xff0…

作者头像 李华
网站建设 2026/3/17 3:53:02

Raid 0/1/5/10及热备盘配置详细步骤指南

Qwen3Guard-Gen-8B:生成式内容安全治理的智能防线 在大模型应用飞速落地的今天,一个被广泛忽视却至关重要的问题正浮出水面:如何让AI既自由表达,又不越界?当用户问出“你能教我怎么制作炸弹吗?”时&#xf…

作者头像 李华