树莓派4配置开机自启可执行文件后出现重复同名进程该如何解决
树莓派4自启程序重复进程问题解决方法
核心原因梳理
- 多套自启规则共存:之前配置的systemd、rc.local规则没有完全清理,两套规则同时生效各自拉起一次进程
- 脚本无单实例限制:自启脚本没有防重复运行逻辑,异常触发时会生成多个实例
- 进程父子关系误判:你看到的两个进程实际是执行死循环的bash父进程 + sudo拉起的vehicle_sep子进程,属于正常关联进程,并非重复启动,可通过
ps -ef | grep vehicle_sep查看PPID确认父子关系
修复操作步骤
1. 清理冗余自启配置
保留一种自启方式即可,建议优先用systemd,清理多余规则:
- 打开
/etc/rc.local文件,删除你之前添加的脚本启动命令,保存退出 - 执行
systemctl list-unit-files | grep enabled查找你自行添加的自启service,执行sudo systemctl disable 旧服务名.service禁用冗余服务 - 执行
sudo reboot重启后先确认进程数是否恢复正常
2. 优化自启逻辑(可选,适配需要用bash脚本托管的场景)
如果需要用bash脚本做进程拉起,给脚本加单实例文件锁,避免重复运行:
#!/bin/bash # 定义锁文件路径 LOCK_PATH="/var/run/vehicle_sep.lock" # 创建文件锁,重复启动时直接退出 exec 9>"$LOCK_PATH" if ! flock -n 9; then exit 1 fi while true do # 若自启配置已指定运行用户为root,无需额外加sudo /home/pi/RP_code/vehicle_sep # 程序崩溃后等待1秒再重启,避免资源耗尽 sleep 1 done
修改完成后给脚本赋予执行权限:chmod +x /home/pi/你的脚本路径.sh
3. 配置systemd单实例自启(推荐)
直接用systemd托管进程,无需额外写bash脚本,只会生成一个运行进程:
新建service文件/etc/systemd/system/vehicle_sep.service,内容如下:
[Unit] Description=Vehicle separation service After=network.target [Service] Type=simple User=root ExecStart=/home/pi/RP_code/vehicle_sep # 程序异常退出时自动重启 Restart=always RestartSec=1 [Install] WantedBy=multi-user.target
执行以下命令生效配置:
sudo systemctl daemon-reloadsudo systemctl enable vehicle_sep.servicesudo systemctl start vehicle_sep.service
4. 验证运行状态
执行ps -ef | grep vehicle_sep查看进程,正常仅会显示一个vehicle_sep运行进程,无重复实例。
内容的提问来源于stack exchange,提问作者Yashvant
相关产品推荐
相关产品推荐

