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

