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

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

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

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

我无法注销,因为我正处于长时间上传的过程中,如果可以的话,我不会关闭它。有什么办法可以重新加载 nautilus 而无需注销吗?

答案1

仅供参考,我遇到了同样的问题。就我的情况而言,这似乎是由我的 FS 树中某个位置的安装点故障引起的。

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

答案2

当 Nautilus 停止响应并且无法被杀死时,原来是我sshfs挂了。所以这有助于杀死它:

killall sshfs

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

当然,这种方法并不总是有效,因为当文件浏览器(如 Nautilus)挂起时,即使在本文所述的kill -9无效的特定情况下,也并不总是由于 的问题sshfs。然而,这似乎是导致问题的一个相当常见的原因。

终止操作sshfs还会通过挂载停止其他文件系统活动sshfs。当sshfs出现故障时,您可能希望这样做。当没有出现故障,并且其他问题导致文件浏览器挂起时,您可能不希望这样做。


当一个进程无法被杀死时,即使SIGKILL使用 root 权限也无法杀死它(这里的问题描述了这种情况nautilus),通常是因为该进程卡在了不间断睡眠(也可以看看3dGrabber评论)。1

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

杀死一个进程就完成了通过向其发送信号默认情况下,kill命令发送SIGTERM,进程可以自由地处理它们想要的任何情况,因此有时是无效的。终止进程的更严厉的方法是SIGKILL(哪个kill -9kill -KILL发送)。进程不能选择忽略SIGKILL但他们在不间断睡眠期间仍然无法收到该信息

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

保险丝司机是这种情况的一个主要例外。当它们发生故障时,经常无需重新启动。使用 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进程管理桌面。

答案3

运行命令

killall nautilus

为我修复了这个问题 - 它可能会对未来的访问者有所帮助。

答案4

nautilus -q已经試過了嗎?

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

相关内容