如何修改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
相关产品推荐
相关产品推荐

