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

如何修改Bash脚本实现C程序文件变更时自动终止并重启(Linux Mint)

改进后的C文件自动编译重启脚本

下面是修改后的脚本,能在C程序运行时检测到源文件变更,自动终止当前进程、重新编译并启动新程序:

#!/bin/bash
read -p '要监听哪个C文件?: ' file_name
# 初始化文件修改时间戳和进程PID
old_file_sig=$(stat -c %Z "$file_name")
proc_pid=""

while true
do
  new_file_sig=$(stat -c %Z "$file_name")
  if [[ "$new_file_sig" != "$old_file_sig" ]]; then
        # 如果进程正在运行,先终止它
        if [[ -n "$proc_pid" && -d "/proc/$proc_pid" ]]; then
            kill "$proc_pid"
            # 等待进程彻底退出
            wait "$proc_pid" 2>/dev/null
        fi
        
        # 编译并启动新程序,后台运行并记录PID
        if gcc "$file_name" -o "${file_name}.o"; then
            ./"${file_name}.o" &
            proc_pid=$!
        fi
        
        old_file_sig=$new_file_sig
  fi
  sleep 1
done

关键改动说明:

  • 新增proc_pid变量记录运行中C程序的进程ID
  • 检测到文件变更时,通过/proc/$proc_pid判断进程是否存活,存活则用kill终止,并用wait确保进程彻底退出
  • 编译成功后,将程序后台运行(加&),并通过$!获取刚启动进程的PID
  • 修复原脚本硬编码c.c的问题,统一使用用户输入的file_name变量

使用注意:

  • 脚本每1秒检测一次指定C文件的修改时间
  • 若编译失败,会保留之前的运行进程(如果存在)
  • 若程序不响应默认终止信号,可将kill "$proc_pid"改为kill -9 "$proc_pid"强制杀死进程

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 23:05:31