Как я могу найти, какой процесс открыл определенный файл? - PullRequest
2 голосов
/ 01 февраля 2009

Как узнать, для каких процессов открыт определенный файл, а также в режимах их открытия, доступа и обмена? Кроме того, возможно ли изменить эти значения для процесса? Или даже можно открыть файл для чтения, если он уже открыт для монопольного доступа другим процессом?

Обратите внимание, что я не хочу лишать законной силы дескриптор процесса, открывающего файл. Я просто хочу иметь доступ к файлу (если это возможно).

(Я в основном спрашиваю о Windows, но приветствуются решения для других платформ, поскольку они вносят вклад в знания сообщества.)

Редактировать: я нашел несколько ответов на свой первый вопрос здесь и там .

Редактировать 2: Спасибо всем за инструменты, которые вы упомянули, но я в основном ищу программные методы (например, с использованием API Win32).

Ответы [ 6 ]

5 голосов
/ 01 февраля 2009
3 голосов
/ 01 февраля 2009

Для Windows я знаю об инструменте от Sysinternal (www.sysinternals.com): handle.exe.

2 голосов
/ 01 февраля 2009

Существует утилита под названием Unlocker , которая сообщает вам, какой процесс получил блокировку ресурса.

1 голос
/ 01 февраля 2009

Это команда lsof в системах Linux.

1 голос
/ 01 февраля 2009

Для Unix вы можете использовать fuser:

lnx0:i386_linux26> fuser -v a.cpp

                     USER        PID ACCESS COMMAND
a.cpp                nabcdefg    3952 f....  less
0 голосов
/ 01 февраля 2009

Я не уверен, есть ли способ сделать именно то, что вы хотите, но я знаю, что с помощью класса 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, возможно, существует свойство или коллекция для получения данных, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...