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

如何停止Bash中运行的后台心跳循环

解决方案

你可以通过以下几种方式停止后台运行的心跳循环:

方案1:启动时记录PID,停止时直接销毁(推荐)

后台进程启动后,Bash会自动将最近一个后台进程的PID存入内置变量$!,你只需要在启动时保存该值,停止时销毁对应进程及其附属子进程即可:

  1. 修改启动代码,保存心跳进程PID
# 启动心跳循环并记录PID
(while true
do
  sleep $interval
  echo '{"op":1,"d":null}' > ws0
done) &
HEARTBEAT_PID=$!
  1. 需要停止心跳时,执行以下命令销毁整个进程组(避免残留sleep子进程)
# 负号表示销毁对应PID的整个进程组,会同时杀掉循环内的sleep进程
kill -- -$HEARTBEAT_PID

方案2:通过标记文件实现优雅退出(无强制杀进程风险)

如果不想用强制杀进程的方式,可以在循环内增加停止标记判断,无需记录PID也能安全停止:

  1. 修改心跳循环代码
# 提前清除残留的停止标记
rm -f /tmp/shellcord_heartbeat_stop
(while true
do
  # 每次循环前先判断是否需要退出
  if [ -f /tmp/shellcord_heartbeat_stop ]; then
    rm -f /tmp/shellcord_heartbeat_stop
    exit 0
  fi
  sleep $interval
  echo '{"op":1,"d":null}' > ws0
done) &
  1. 需要停止心跳时,只需创建对应标记文件,进程最多等待$interval秒就会自动退出
touch /tmp/shellcord_heartbeat_stop

应急方案:未记录PID时查找并销毁进程

如果你没有提前记录PID,可以用pgrep匹配进程特征找到PID后销毁:

# 查找匹配心跳循环特征的进程PID
HEARTBEAT_PID=$(pgrep -f 'while true do sleep.*echo {"op":1')
# 销毁进程组
kill -- -$HEARTBEAT_PID

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:18:01