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

如何编写Bash脚本实现双二进制程序崩溃后按顺序自动重启

结论:检查PID不是该需求的最优方案

PID方案存在两个天然缺陷:

  • 系统会复用回收的PID,若原进程崩溃后PID被其他进程占用,会出现「PID存在但目标进程已退出」的误判
  • 若通过进程名匹配PID,系统中存在其他同名进程时也会导致监控逻辑出错
  • 定时轮询检查PID会产生不必要的CPU开销,进程退出的感知延迟取决于轮询间隔
更优实现方案

推荐直接通过Bash内置的后台进程控制与wait命令实现监控,无需轮询、判断准确率更高,完全匹配你的启动顺序、故障重启要求。

可用脚本示例

#!/bin/bash
# 替换为你的二进制文件绝对路径
HELLO1="/opt/app/hello1"
HELLO2="/opt/app/hello2"

while true; do
    # 按顺序启动hello1
    "$HELLO1" &
    pid1=$!
    # 按需调整等待时间,确保hello1启动完成后再启动hello2
    sleep 3

    # 启动hello2
    "$HELLO2" &
    pid2=$!

    # 阻塞等待任意一个进程退出,立刻进入重启流程
    wait -n "$pid1" "$pid2"

    # 清理残留进程,避免影响下一轮启动
    kill "$pid1" "$pid2" 2>/dev/null
    wait "$pid1" "$pid2" 2>/dev/null
done

逻辑说明

  • 严格遵循先启动hello1、再启动hello2的顺序,可根据hello1的实际启动耗时调整sleep的时长,也可增加端口探测、日志关键字匹配等逻辑确认hello1启动成功后再启动hello2
  • wait -n命令会在任意一个被监听的进程退出时立刻返回,没有轮询开销,进程故障感知无额外延迟
  • 每次重启前会主动杀死两个进程,避免出现孤儿进程、残留进程占用资源或端口

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:00:02