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

如何在Bash中实现树莓派按钮切换控制do.sh脚本启停

实现树莓派按钮控制脚本启停切换

根据你的需求,以下是具体的脚本实现方案,通过按钮触发handle.sh来切换do.sh的启停状态:

1. 完善handle.sh脚本

这个脚本负责检测do.sh的运行状态,实现启停逻辑:

#!/bin/bash

# 精准查找do.sh的进程ID,排除当前脚本自身的进程
TARGET_PID=$(pgrep -f "^./do.sh" | grep -v $$)

if [ -z "$TARGET_PID" ]; then
    # 无运行实例则启动do.sh,后台运行避免阻塞
    echo "启动do.sh..."
    ./do.sh &
else
    # 已有运行实例则终止进程
    echo "终止do.sh进程(PID: $TARGET_PID)..."
    kill $TARGET_PID
    # 在这里添加额外需要执行的操作
    echo "do.sh已停止"
fi

关键说明:

  • pgrep -f "^./do.sh":精准匹配启动命令为./do.sh的进程,避免误杀同名脚本
  • grep -v $$:排除当前handle.sh自身的进程,防止误判
  • ./do.sh &:后台运行do.sh,确保handle.sh执行后立即退出,不影响下次按键触发

2. 保留你的do.sh脚本

无需修改,保持原有功能即可:

#!/bin/bash

echo "录音启动时间:$(date)"
arecord -D hw:3,0 -f cd -r 44100 test.wav

3. 权限配置

给两个脚本添加可执行权限:

chmod +x handle.sh do.sh

4. 注意事项

  • 确保硬件按钮触发逻辑能正确调用handle.sh(比如通过GPIO中断、gpio-watch工具或systemd服务实现)
  • 如果do.sh启动后产生子进程(比如arecord),kill $TARGET_PID会默认终止父进程,子进程可能会变成孤儿进程,若需要彻底终止所有相关进程,可以改用pkill -P $TARGET_PID或kill -TERM $TARGET_PID

内容的提问来源于stack exchange,提问作者kanka.dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 06:40:37