最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Linux使用pkill清理各種服務(wù)進(jìn)程的方法大全

 更新時(shí)間:2025年12月29日 09:11:23   作者:學(xué)亮編程手記  
這篇文章主要介紹了如何使用pkill命令清理不同類型的服務(wù)器進(jìn)程,包括Java-jar、Redis、Elasticsearch、Nginx等服務(wù)的清理方法,同時(shí),還提供了通用的安全清理策略,如按用戶、端口或組合匹配清理,并建議使用腳本和進(jìn)程管理工具來(lái)實(shí)現(xiàn)更安全和高效的清理

通過 pkill 清理不同類型的服務(wù)進(jìn)程需要根據(jù)進(jìn)程特征進(jìn)行精確匹配。本文介紹各種服務(wù)的清理方法:

1. Java -jar 啟動(dòng)的服務(wù)

精確匹配特定的jar包:

# 方法1:通過jar包名匹配
pkill -f 'myapp.jar'

# 方法2:通過主類名匹配
pkill -f 'com.example.MainClass'

# 方法3:通過應(yīng)用名匹配(在啟動(dòng)時(shí)指定)
# java -Dapp.name=myapp -jar myapp.jar
pkill -f 'app.name=myapp'

清理所有Java進(jìn)程(不推薦,太暴力):

# 謹(jǐn)慎使用!會(huì)殺掉所有Java進(jìn)程
pkill -9 java
pkill -9 javaw

2. Redis 二進(jìn)制啟動(dòng)的服務(wù)

# 方法1:通過進(jìn)程名(redis-server通常作為服務(wù)名)
pkill redis-server

# 方法2:通過配置文件路徑(如果通過配置文件啟動(dòng))
pkill -f 'redis-server.*/path/to/redis.conf'

# 方法3:通過端口(如果固定端口)
pkill -f 'redis-server.*:6379'

# 方法4:優(yōu)雅關(guān)閉(發(fā)送SHUTDOWN信號(hào))
redis-cli -p 6379 shutdown

3. Elasticsearch 服務(wù)

# 方法1:通過ES進(jìn)程名
pkill -f elasticsearch

# 方法2:通過Java進(jìn)程的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 服務(wù)

# 方法1:優(yōu)雅停止(推薦)
nginx -s quit

# 方法2:快速停止
nginx -s stop

# 方法3:使用pkill(根據(jù)進(jìn)程名)
pkill nginx

# 方法4:殺掉master和worker進(jìn)程
pkill -9 nginx

# 方法5:通過PID文件
if [ -f /run/nginx.pid ]; then
    kill $(cat /run/nginx.pid)
fi

5. 通用的安全清理策略

方案1:按用戶清理(如果服務(wù)運(yùn)行在特定用戶下)

# 清理www用戶的所有進(jìn)程
pkill -u www

# 清理特定用戶下的Java進(jìn)程
pkill -u appuser -f java

方案2:按端口清理

# 清理占用8080端口的進(jìn)程
fuser -k 8080/tcp

# 或者使用更直接的方法
kill $(lsof -t -i:8080)

方案3:組合匹配,精確清理

# 清理包含特定關(guān)鍵詞的Java進(jìn)程
pkill -f 'java.*myapp'

# 清理除了特定進(jìn)程外的所有Java進(jìn)程
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 服務(wù)...${NC}"
    
    # 查找進(jìn)程
    pids=$(pgrep -f "$pattern")
    
    if [ -z "$pids" ]; then
        echo -e "${GREEN}$service_name 服務(wù)未運(yùn)行${NC}"
        return 0
    fi
    
    # 顯示進(jìn)程信息
    echo "找到進(jìn)程: $pids"
    ps -fp $pids | tail -n +2
    
    # 發(fā)送SIGTERM信號(hào)(優(yōu)雅關(guān)閉)
    echo "發(fā)送優(yōu)雅關(guān)閉信號(hào)..."
    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
    
    # 強(qiáng)制關(guān)閉
    echo "強(qiáng)制關(guān)閉..."
    kill -9 $pids 2>/dev/null
    sleep 1
    
    if pgrep -f "$pattern" > /dev/null; then
        echo -e "${RED}警告: 仍有 $service_name 進(jìn)程在運(yùn)行${NC}"
        return 1
    else
        echo -e "${GREEN}$service_name 已強(qiáng)制停止${NC}"
        return 0
    fi
}

# 清理各種服務(wù)
echo -e "\n${YELLOW}=== 開始清理服務(wù) ===${NC}"

# Redis
clean_service "Redis" "redis-server"

# Elasticsearch
clean_service "Elasticsearch" "org.elasticsearch.bootstrap.Elasticsearch"

# Nginx
clean_service "Nginx" "nginx:"

# Java應(yīng)用(根據(jù)實(shí)際情況調(diào)整模式)
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 的進(jìn)程: $pid"
        kill $pid 2>/dev/null
    fi
done

echo -e "\n${YELLOW}=== 最終狀態(tài)檢查 ===${NC}"
ps aux | grep -E 'redis|elasticsearch|nginx|java.*jar' | grep -v grep

echo -e "\n${GREEN}清理完成!${NC}"

7. 一鍵清理所有開發(fā)環(huán)境服務(wù)

#!/bin/bash
# dev_cleanup.sh - 清理開發(fā)環(huán)境服務(wù)

# 停止所有服務(wù)
echo "停止所有開發(fā)服務(wù)..."

# Docker服務(wù)
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服務(wù)(按特定模式)
pkill -f 'java.*\.jar'

# 數(shù)據(jù)庫(kù)
brew services stop mysql 2>/dev/null  # macOS Homebrew
systemctl stop mysql 2>/dev/null      # Linux systemd

# 檢查清理結(jié)果
echo -e "\n剩余相關(guān)進(jì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. 最佳實(shí)踐建議

優(yōu)先使用專用停止命令

# 優(yōu)于 pkill
nginx -s quit
redis-cli shutdown

創(chuàng)建服務(wù)啟動(dòng)/停止腳本

# 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

使用進(jìn)程管理工具

# 使用supervisor
sudo supervisorctl stop all

# 使用systemd
sudo systemctl stop nginx redis elasticsearch

安全檢查后再清理

# 確認(rèn)進(jìn)程
ps aux | grep -E 'java.*jar|redis|nginx'

# 確認(rèn)端口
ss -tuln | grep -E ':(8080|6379|80)'

以上就是Linux使用pkill清理各種服務(wù)進(jìn)程的方法大全的詳細(xì)內(nèi)容,更多關(guān)于Linux pkill清理各種服務(wù)進(jìn)程的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

大港区| 象山县| 青州市| 新巴尔虎左旗| 水城县| 偏关县| 惠水县| 静海县| 班戈县| 静海县| 古交市| 南靖县| 呈贡县| 嘉兴市| 临桂县| 安塞县| 渭南市| 汾阳市| 宁安市| 永兴县| 瑞安市| 卢龙县| 申扎县| 许昌市| 通州市| 久治县| 安达市| 深水埗区| 上杭县| 泉州市| 杂多县| 台前县| 新营市| 旬阳县| 册亨县| 宣城市| 鄯善县| 梅河口市| 镇坪县| 尼玛县| 昌平区|