You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux脚本问题:无法检测exe2运行状态,求解决方案

Linux进程监控脚本问题排查与修复

需求回顾

  • 启动exec1进程
  • 仅在exec1运行时启动exe2
  • exec1终止时,自动终止exe2

现有脚本的问题

  1. 语法错误破坏逻辑

    • echo "exe2 running缺少闭合双引号,导致后续if语句结构错乱
    • 第一个if pgrep -f exec1的fi位置错误,使得else分支无法正确匹配,脚本执行时会抛出语法异常
  2. 进程检测不精准

    • 用pgrep -f exe2或ps aux | grep exe2时,exe2是通过sudo -E ./exe2启动的,完整命令行包含sudo前缀和相对路径,直接搜exe2会匹配不到实际进程
    • 传统ps + grep的方式存在误匹配风险,且写法冗余
  3. 逻辑缺陷

    • xcute变量设为true后,即使exe2意外崩溃,脚本也不会重新启动它,因为变量未重置
    • 启动exe2时未加&,会阻塞脚本的循环检测,导致后续逻辑无法执行

修复后的脚本

#!/bin/bash

# 脚本启动时清理残留的exe2进程
sudo -E pkill -f "./exe2" > /dev/null 2>&1

while true; do
    # 检测exec1是否运行
    if pgrep -f "exec1" > /dev/null; then
        echo "exec1正在运行,检查exe2状态..."
        # 精确匹配exe2的完整启动命令
        if ! pgrep -f "sudo -E ./exe2" > /dev/null; then
            echo "启动exe2..."
            # 后台运行exe2,避免阻塞脚本循环
            sudo -E ./exe2 &
        fi
    else
        echo "exec1已终止,关闭exe2..."
        # 终止exe2进程
        sudo -E pkill -f "./exe2" > /dev/null 2>&1
        exit 0
    fi
    sleep 1
done

修复关键点说明

  • 修正语法问题:补全缺失的引号,调整if-fi嵌套结构,确保脚本语法合法
  • 精确进程匹配:使用pgrep -f "sudo -E ./exe2"匹配exe2的完整命令行,避免漏检
  • 后台运行exe2:添加&让exe2在后台执行,保证脚本的循环检测能持续运行
  • 冗余变量移除:去掉xcute变量,每次循环主动检测exe2状态,exe2崩溃后能自动重启
  • 简洁进程终止:用pkill -f替代复杂的ps管道命令,更可靠且易维护

内容的提问来源于stack exchange,提问作者Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:07:27