每当我启动gentoo笔记本电脑时,openrc就永远挂在“缓存服务依赖项”中.舞台。这将导致我的计算机无法启动,除非我使用sysrq键杀死它并手动引导系统。
使用ps作为诊断工具,我发现grep和cut程序(脚本gendepends.sh的子程序)正在挂起,使用的是0%的CPU。在调用openrc default之后,关闭这些程序可以使引导进程继续正常进行。
无论如何,我可以使用许多方法来解决这个问题,但是我想知道最可能的原因并正确地解决它。
下面是pstree的相关输出,当我尝试手动解析依赖时:
| | `-doas /lib/rc/bin/rc-depend -u
| | `-rc-depend -u
| | `-gendepends.sh /lib64/rc/sh/gendepends.sh
| | `-gendepends.sh /lib64/rc/sh/gendepends.sh
| | `-gendepends.sh /lib64/rc/sh/gendepends.sh
| | |-cut -d = -f 2
| | |-grep pid
| | |-tr -d \\"
| | `-tr -d [:space:]在gendepends.sh中,这些命令在任何地方都没有提到,所以我假设它们是从它所提供的另一个脚本中调用的。
编辑:我已经解决了这个问题。结果发现,它是由一个具有无法解决的依赖项的旧init脚本引起的,由于某种原因,该脚本仍然躺在我的initscript目录中。删除脚本解决了问题。谢谢你的建议。
发布于 2017-12-15 13:22:21
这些命令不是凭空挂起的;它们肯定是由init脚本调用的,但是参数可能是错误的,或者是不存在的数据。我可以想象他们在等待一些没有被提供的输入。
在ps -ef的输出中,您可以找到父进程的ID (PPID),这可能是罪魁祸首;您还可以尝试pstree进行更好的概述。试着找出调用命令(S)的脚本行,也许您可以找出进程和结果是整个引导进程挂起的原因。
如果您无法指出这个问题,那么将ps -ef的输出添加到您的问题中(您可以将其缩短到挂起命令并将其父命令缩短到PID 0),如果涉及到init脚本,则将其缩短。
https://unix.stackexchange.com/questions/411039
复制相似问题