鹦鹉螺被冻结,无法使用,也无法杀死

Naf*_*Kay 9 nautilus

我现在遇到了最奇怪的问题。Nautilus 现在基本上不工作。我的桌面被冻结,单击和右键单击不起作用,我无法在 nautilus 中打开任何东西,等等。它只是坏了。问题是我不能用任何东西杀死它。

while true; sudo killall -9 nautilus ; done 不会杀死它。

我无法注销,因为我正处于长时间上传的过程中,如果我能帮上忙,我不会杀死它。有什么我可以在不注销的情况下重新加载 nautilus 的方法吗?

log*_*ion 7

仅供参考,我遇到了同样的问题。就我而言,它似乎是由我的 FS 树中某处的错误挂载点引起的。

具体来说,罪魁祸首是 samba 挂载 (cifs) 由于我丢失 VPN 而失败。由于 nautilus 在左侧边栏中的“网络”下提到了这些,我猜这会导致它挂起。作为一种解决方法,我重新安装了所有卷(sudo mount -a),现在 nautilus 再次响应。


voz*_*man 7

当鹦鹉螺停止反应并且无法被杀死时,结果证明我已经sshfs上吊了。所以这有助于杀死它:

killall sshfs
Run Code Online (Sandbox Code Playgroud)

挂起时sshfs,有时会导致文件浏览器挂起,使其本身无法被杀死,但sshfs仍然可以被杀死。在这种情况下终止sshfs可以终止(并重新启动)文件浏览器。有时文件浏览器sshfs被杀死后会退出;有时它甚至可能立即开始响应而不必被杀死。

当然,这并不总是有效,因为当文件浏览器(例如 Nautilus)挂起时,即使在此处描述的kill -9无效的特定场景中,也并不总是由于sshfs. 然而,这似乎确实是问题的一个相当常见的原因。

终止sshfs还可以通过挂载停止其他文件系统活动sshfs。当sshfs出现故障时,您可能需要这样。如果不是,并且其他一些问题导致文件浏览器挂起,则您可能不会。


当一个进程无法被杀死时,即使是SIGKILL使用 root 权限(这就是这里的问题所描述的情况),nautilus通常是因为该进程陷入了不间断的睡眠状态(另请参阅3dGrabber评论)。1

进程在很短的时间内进入不间断睡眠状态是正常的。进程通过系统调用与内核进行通信。某些系统调用在执行时不能被信号中断,因此发送到进程的任何信号都必须等待系统调用完成。通常情况下,会发生这种情况,然后接收到信号。但是,当无法中断的系统调用挂起时,进程永远无法收到信号,除非可以通过其他方式停止挂起。

终止进程是通过向其发送信号来实现的。默认情况下,该kill命令发送SIGTERM,进程可以随意处理,因此有时无效。终止进程的更严厉的方法是SIGKILL(which kill -9or kill -KILLsend)。进程不能选择忽略SIGKILL但它们在不间断睡眠时仍然不会接收它

长时间不间断睡眠的一个常见原因是驱动程序出现故障,包括文件系统驱动程序。驱动程序通常被实现为内核模块,虽然大多数内核模块可以加载和卸载,但一旦一个模块出现故障并且无法完成某项操作,通常没有合理且安全的方法来强制其停止,同时继续使用系统。要结束陷入不间断睡眠的进程,通常需要重新启动。

FUSE驱动器是一个主要的例外。当它们出现故障时,您通常不需要重新启动。使用 FUSE,如何访问文件系统的细节是在内核外部的普通程序中实现的。要访问 FUSE 文件系统上的数据,程序仍然会进行系统调用,但内核通过 FUSE 模块将它们委托给处理程序。

sshfs是一个 FUSE 文件系统驱动程序。当在挂载上访问数据时sshfs,会执行系统调用,将工作委托给sshfs进程。(在幕后,运行了挂载sshfs文件系统/usr/bin/sshfs。或者您可能手动运行了sshfs命令。)如果出现故障,可能会导致尝试访问sshfs文件系统的程序保持不间断睡眠状态,sshfs进程本身可能仍然是可杀死的。当该进程被终止时,系统调用将不再卡住,返回一个错误代码以指示失败,并且发出系统调用的程序可以终止或继续运行。

导致长时间不间断睡眠的故障并非 所独有sshfs。它们可能发生在任何文件系统上,无论是否是 FUSE,但如果它不是 FUSE 文件系统,那么您可能必须重新启动。还有其他常用的 FUSE 文件系统也可能发生这种情况,例如ntfs-3g. 这种情况在任何文件系统上都不会经常发生,但实际上,它似乎sshfs比大多数其他 FUSE 文件系统更频繁地发生。

任何使用故障文件系统驱动程序进行系统调用的程序都可能遇到此问题。但您通常至少会尝试访问sshfs挂载上的文件,从而了解可能出现的问题。相比之下,文件浏览器经常访问当前工作位置之外的数据,以避免提供有关当前安装的文件系统以及其上有多少可用空间等过时的信息,有时会在后台获取信息来构建缩略图。


1另一种可能发生这种情况的情况是当它是僵尸进程时。然而,与陷入不间断睡眠的进程不同,僵尸进程很少引起问题,因为它占用的唯一资源是内核进程表中的一行。僵尸nautilus进程通常不会被注意到。特别是,这不应阻止后续执行的nautilus进程管理桌面。


Tim*_*Tim 6

运行命令

killall nautilus
Run Code Online (Sandbox Code Playgroud)

为我解决了这个问题 - 它可能对未来的访客有所帮助。


Mes*_*ion 1

nautilus -q已经尝试过了吗?

它退出(并重新启动)nautilus。当它挂起或在安装新的 nautilus 上下文操作后需要“刷新”它时,我会使用它