2009-02-01 35 views
2

我怎樣才能找到哪些進程打開了特定的文件,以及他們的開放,訪問和共享模式?此外,是否可以更改某個過程的這些值?或者,如果已經打開文件供其他進程獨佔訪問,甚至可以打開文件進行閱讀?我怎樣才能找到哪個進程打開了一個特定的文件?

請注意,我不想使打開文件的進程的句柄無效。我只是想能夠訪問該文件(如果可能)。

(我主要是要求有關Windows,但是對於其他平臺的解決方案是值得歡迎的,因爲他們對社會的貢獻的知識。)

編輯:我找到了我的第一個問題herethere一些答案。編輯2:感謝大家提供的工具,但我主要是在尋找編程技巧(例如使用Win32 APIs)。

+0

@Hosam Aly:「但我主要是在尋找編程技巧」:或許你應該在下一次的問題中提出這個問題? – 2009-02-01 09:13:13

+0

@Mitch,謝謝。對此我很抱歉。下次我會更加小心。 – 2009-02-01 09:14:06

+1

顯然,[重新啓動管理器](http://blogs.msdn.com/b/oldnewthing/archive/2012/02/17/10268840.aspx)可以在Windows Vista和更高版本中執行此操作。 – 2012-02-17 20:39:06

回答

2

有一個叫Unlocker一個工具,它會告訴你哪個進程已經得到了對資源的鎖。

3

對於windows,我從Sysinternal(www.sysinternals.com)瞭解一個工具:handle.exe。

1

對於UNIX您可以使用fuser

lnx0:i386_linux26> fuser -v a.cpp 

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

這是Linux系統下的lsof的命令。

-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類,可能有一個屬性或集合來獲取您正在查找的數據。

相關問題