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

如何编写进程成功结束时退出的Bash脚本While循环

修复Bash脚本的进程检测循环

你的原脚本存在一个关键问题:进程数量变量VAR只在循环开始前计算一次,循环内不会重新获取最新的进程状态,导致即使目标进程已经结束,脚本也无法检测到并退出。

以下是两种修正方案:

方案一:循环内重新统计进程数

在每次循环中重新计算目标进程的数量,确保检测的是实时状态:

while true; do
    # 重新统计匹配"tail"的进程数(去掉原代码里多余的*,避免shell解析错误)
    VAR=$(ps -ef | grep -i tail | grep -v grep | wc -l)
    if [ "$VAR" -eq 0 ]; then
        echo "Sending MAils ...."
        exit 0
    fi
    # 添加休眠减少CPU占用
    sleep 1
done

方案二:用pgrep简化检测逻辑

pgrep是专门用于查找进程ID的工具,比管道组合更简洁高效:

# 当匹配"tail"的进程存在时,循环继续;进程结束则退出循环
while pgrep -i tail > /dev/null; do
    sleep 1
done
echo "Sending MAils ...."
exit 0

注意事项

  • 原代码中的tail*写法错误:*会被shell解析为当前目录下以tail开头的文件名,而非正则匹配,直接写tail即可匹配包含该关键词的进程。
  • 添加sleep 1是为了避免脚本高频循环占用过多CPU资源。

内容的提问来源于stack exchange,提问作者MohammedNour Al-Rawabdeh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 19:45:39