1
acess 2022-11-03 02:00:10 +08:00
当系统提示文件被占用时,为何不顺便告诉用户文件被什么进程占用呢? - 知乎用户的回答 - 知乎
https://www.zhihu.com/question/31614421/answer/52718104 |
2
acess 2022-11-03 02:08:09 +08:00
另外其实不需要 process explorer 等工具,其实系统自带的资源监视器里就能查句柄。
|
3
acess 2022-11-03 02:29:10 +08:00
知乎答案里提到的“示例代码”,其实是 oldnewthing 博客里的一篇。不过看着感觉奇怪,因为 oldnewthing 博客文章里说没有追踪所以查不到,但知乎答案里却说“NT/2000 时代起就可以用 NtQuerySystemInformation 查到系统打开的所有句柄及其对应的 PID”(相当于 lsof 吧?)
|
4
acess 2022-11-03 02:32:49 +08:00
其实说到 oldnewthing 我有点想起 youtube 上 NCommander 讲的三维弹球的故事(虽然我是在 B 站看的汉化搬运),其实背后并不像 oldnewthing 里说的那么简单。
|
5
geelaw 2022-11-03 03:42:58 +08:00 via iPhone 1
@acess #1 复制一下我刚写的评论:
答案自然是因为 COM 。文件的所有权不一定“来自”打开它的进程,或许是进程 A 用进程外 COM 服务器 B 打开了文件 C ,此时提示是 B 占用 C 是技术上正确,但对于普通用户无意义 /误导的信息,甚至可能鼓励自以为是的用户干掉进程 B 。例如一些文件在 svchost 里打开,但解决方法是关掉另一个程序。 |
6
Building 2022-11-03 09:09:39 +08:00
A 让 B 使用 C 打开文件 D ,请问文件 D 应该被哪个进程占用?
|
7
tgich 2022-11-03 10:02:41 +08:00
今天最新的 power toy 也支持查看被占用的应用
|
9
ysc3839 2022-11-03 12:35:09 +08:00
@geelaw 其实有些情况下可能是 bug 导致无法显示,比如删除某个进程的当前目录 (current directory) 时就不会显示是哪个进程。
|
10
acess 2022-11-03 13:36:29 +08:00 via Android
@geelaw 但我觉得有时候用户也未必在乎要不要 graceful shutdown ,结束进程就是很粗暴的动作。
svchost 这个听起来好像影响可能扩大到很严重,但反过来我也在想如果真是这样那是不是应该尽量避免影响扩大呢?我记得 oldnewthing 博客里也说过 com surrogate 就是 explorer 的替死鬼。 |
11
acess 2022-11-03 13:38:14 +08:00 via Android
再扯远点,我记得像 chkdsk 也有强制卸除卷的选项,这也是在其他程序没有主动配合的情况下强行进行的,“会让已打开的句柄无效”
|
12
wanguorui123 2022-11-03 13:41:21 +08:00
IObit Unlocker 可以查看占用和解锁
|
13
tgich 2022-11-03 14:27:03 +08:00 2
|