Yocto系统开机卡在启动界面,如何终止rc3.d中的无限循环脚本?
别急,这种启动卡死后没法正常操作的情况我碰到过好几次,给你几个靠谱的解决办法:
方法一:进入单用户模式直接修改
这是最稳妥的方式,绕过正常启动流程直接拿到root权限:
- 重启你的系统,在GRUB启动菜单弹出来的时候(如果没看到,试试按
Shift或Esc键唤出来),选中平时用的内核选项,按e进入编辑模式 - 找到以
linux开头的那一行,把行尾的ro改成rw init=/bin/bash(部分系统用rw init=/bin/sh也可以) - 按
Ctrl+X或者F10启动,这时会直接进入根目录的shell,完全拥有root权限 - 直接删掉那个搞事的符号链接:
rm /etc/rc3.d/S*my_app(rc3.d里的启动脚本都是S开头的,用通配符能精准定位) - 做完后执行
exec /sbin/init恢复正常启动流程,或者直接重启就行
方法二:用systemd紧急救援模式(适用于新发行版)
如果你的系统用的是systemd(现在大部分Linux发行版都是),步骤更简单:
- 同样重启后在GRUB菜单选内核,按
e进入编辑 - 在
linux开头的行末尾,加上systemd.unit=emergency.target - 启动后输入root密码登录,就能进入紧急模式shell
- 重复上面删除符号链接的操作,之后执行
systemctl default回到正常启动
方法三:远程SSH登录(如果之前配置过)
要是你之前给系统开了SSH服务,而且网络模块已经启动了(虽然脚本卡死,但SSH可能已经跑起来了),可以试试从另一台机器远程操作:
- 用SSH登录root账号:
ssh root@你的系统IP - 先找到那个无限循环脚本的进程:
ps aux | grep my_app - 强制杀死进程:
kill -9 <查到的进程ID> - 最后删掉rc3.d里的符号链接,避免下次启动再卡
小提醒
操作时注意别误删rc3.d里的其他文件,不确定的话可以先用ls /etc/rc3.d/查看一下所有符号链接,确认好目标再删除。
内容的提问来源于stack exchange,提问作者popro
相关产品推荐
相关产品推荐

