while(1) 在 /etc/rc.local 上

while(1) 在 /etc/rc.local 上

我在嵌入式板上写了while true; do ping 10.9.0.1; sleep 1; done字。/etc/rc.local我已经等了20多分钟了,还是没有收到登录提示。要么卡在启动上,要么启动速度非常慢(通常在我的设备上需要不到 2 分钟才能收到登录提示)。

我可以通过将 SD 卡插入笔记本电脑并删除while(1).但我想知道如果我在 PC/笔记本电脑上做了这样的事情,是否可以修复它而无需重新安装发行版?

答案1

首先,正如所写的,ping除非我们无法找到主机,否则您将永远运行,因为它会一直运行直到捕获到SIGINT告诉它停止的信号(即)。

/etc/rc.local据我记得,中的脚本不是在后台运行的。因此,您的脚本永远不会完成,因为它是一个无限循环。根据您执行此操作的具体原因,您可以将其设置为后台或将其更改为在满足条件时退出。

如果您这样做是为了延迟直到网络出现,您可以:

while ! ping -c1 10.9.0.1; do
   sleep 1
done

或者,如果您确实希望在后台运行每秒一次的 ping,则可以使用screennohupdisown将进程与 shell 分离并允许启动继续进行。

无论哪种方式,这都是一件潜在危险的事情,因为如果出现问题,您没有任何方法可以在启动时停止脚本。

/etc/init.d/您可能会更好地使用与您选择的运行级别相关联的脚本,该脚本具有足够的逻辑,可以在事情花费太长时间时中止。

相关内容