在什么情况下,系统进程(PID 4)会保留一个打开的文件句柄?

32

我的应用程序在运行在Windows服务器上,使用Jet/Access数据库。由于某些原因,大约每两周这个数据库文件会被系统进程(PID 4,似乎是固定的)锁定。

通过一些谷歌搜索,我发现一些其他用户也有他们的文件被该特殊进程锁定,但不同的文件(当然)。

  • 系统进程保持打开文件句柄的常见原因是什么?
  • 我的应用程序是否导致了这种锁定情况?
  • 所有句柄都是由系统进程隐式打开的吗?我可以想象,在一个进程崩溃后,句柄可能仍然打开,而系统进程以某种方式占有了那个句柄。
  • 我能在我的应用程序里做些什么来防止它发生吗?
8个回答

47

通过共享访问的文件将被系统进程(PID 4)锁定。

尝试打开compmgmt.msc -> 系统工具 -> 共享文件夹 -> 打开的文件,查看被锁定的文件是否在列表中。

另请参阅Sysinternals论坛了解一种复制此问题的方法。
并不是所有应用程序在打开时都会锁定文件,但Excel会。 我不知道Access是否也会这样做...


这正是我的问题。用户通过UNC路径运行可执行文件到远程计算机,即使应用程序自行关闭,句柄仍保持在远程计算机上打开。使用来自Sysinternals的psfile和handle.exe进行故障排除非常容易。 - Chris Stavropoulos
你是最棒的,我尝试了许多其他的解决方案都没有成功。谢谢。 - gringo_dave
这个方法有效。使用Sysinternals的handleprocexp无法关闭文件,尽管它们告诉我问题出在哪里,让我能够找到答案。我的问题发生在通过Hyper-V在Windows上运行docker时。在docker中运行的服务器创建了一个文件,随后被system进程锁定。感谢您的回答。 - kumarharsh
哦,老兄,非常感谢这个。看起来很简单,直到它在 HA 生产环境中锁定了事情。现在我需要一个“文件删除专家”徽章吗? - kworr

29

这里是我发现的另一个可能的原因:

Windows 7和可能仅限于Windows Server 2008(可能仅限64位版本)存在一个错误。当您禁用应用程序体验服务时,它会出现,并引起与问题描述相同的问题。

重新启用此服务已为我修复了此问题。

关于为什么会导致问题的更多信息在此处

其他相关的SO问题列表:


2
+1 这对我有用,而且我没有运行任何反病毒软件,所以确实发生了一些奇怪的事情。 - Tamara Wijsman
1
我的天啊,怎么会有人发现应用程序体验是导致这个问题的原因呢?一定是个幸运的家伙。非常感谢您,我终于可以再次在这台电脑上工作了! - Mahmoud Al-Qudsi
2
@MahmoudAl-Qudsi 我不确定 OP,但我个人也是通过艰难的方式发现问题的:在长时间的微调会话中,我禁用了大量的Windows服务之后,Steam(游戏应用程序)无法更新。 它抱怨一个文件正在使用中。 如果我记得正确的话,Process Explorer显示涉及的文件被explorer.exe或System使用,这让我感到奇怪。 最终,我重置了服务配置,问题就消失了。 从那时起,我再次逐个禁用它们,直到找到罪犯 :/. - Zero3
1
我已经记录下来,永远不要再禁用这项服务了。更好的是,我可能不应该碰任何微软/Windows的服务!我很高兴偶然发现了您的答案,许多其他替代解决方案都没有任何作用或者一些其他场景只是稍微偏离特定错误/进程/服务正在占用该文件的情况。 - chamberlainpi

8
这对我来说听起来像是一个有关泄漏句柄的驱动程序级问题。
如果您正在运行防病毒软件,请尝试升级、暂时禁用或更换其他品牌。

7

可能是远程计算机到共享文件夹的会话仍在进行中。如果是这种情况,可以通过命令行解锁:

net session /delete

我有点担心运行这个命令,因为我害怕会产生副作用。我先运行了 net session 命令,并报告了一个连接。然后我运行了该命令,它提示每个被终止的会话。 - Be Kind To New Users

2
对我来说,这个问题是与“Windows Defender”(反病毒软件)有关。我将我的Visual Studio构建文件夹从Windows Defender的检查列表中排除,问题就解决了。(Visual Studio无法构建EXE文件,PID 4锁定以检查病毒)

1

对于我来说,我必须用大锤敲打它。在包含文件夹的驱动器上运行 chkdsk /f 可以修复它。请谨慎使用。


1
你的服务器是否设置了定期文件备份?
如果是这样,备份是否以系统身份运行,可能会在发生冲突时提示锁定文件?

任何进程如何作为系统进程运行?只是为了确保,我不是在谈论SYSTEM用户,而是PID=4的名为System的进程。 - Daniel Rikowski
当这篇文章发布时,该规则并没有得到很好的确立。如果您进行了编辑,您就可以获得挖掘机徽章。 ;) - Greg D

0

检查每个文件夹和子文件夹的安全设置。确保系统没有自动创建特殊权限设置,这将不允许任何人删除文件。显然由于某种奇怪的原因,操作系统会创建一种奇怪的特殊权限设置,以保护文件不被删除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接