如何找到哪个进程打开了特定文件?

时间:2009-02-01 09:00:48

标签: winapi file

如何找到打开特定文件的进程及其打开,访问和共享模式?此外,是否可以更改流程的这些值?或者甚至可以打开一个文件进行阅读,如果它已被打开以供另一个进程独占访问?

请注意,我不想让打开文件的进程句柄无效。我只是想能够访问该文件(如果可能的话)。

(我主要询问Windows,但欢迎其他平台的解决方案,因为它们有助于社区的知识。)

修改:我在第一个问题herethere找到了一些答案。

编辑2:感谢大家提供的工具,但我主要是寻找程序技术(例如使用Win32 API)。

6 个答案:

答案 0 :(得分:5)

答案 1 :(得分:3)

对于Windows,我知道Sysinternal的一个工具(www.sysinternals.com):handle.exe。

答案 2 :(得分:2)

有一个名为Unlocker的实用程序可以告诉您哪个进程已锁定资源。

答案 3 :(得分:1)

对于unix,您可以使用fuser

lnx0:i386_linux26> fuser -v a.cpp

                     USER        PID ACCESS COMMAND
a.cpp                nabcdefg    3952 f....  less

答案 4 :(得分:1)

这是Linux系统下的 lsof 命令。

答案 5 :(得分:-1)

我不确定是否有办法完全按照你的意愿行事,但我知道使用System.Diagnostics.Process类(至少在.Net中)你可以打开进程并监视某些属性:

System.Diagnostics.Process[] procArray = System.Diagnostics.Process.GetProcessesByName("notepad");
foreach (System.Diagnostics.Process proc in procArray) {
    //do something with the process...
}

查看Process类,可能有一个属性或集合来获取您要查找的数据。