从进程中识别和删除坏句柄的最佳方法是什么?

What's the best way of identifying and removing bad handles from a process?

这个问题就不多说了。我想在我的流程中添加一个功能来识别 "bad handles" 并删除它们。

更新:我知道 "bad handle" 听起来像是一个模糊的术语。基本上任何会阻止我通过 IPC 与进程通信的东西。

我仍然不确定 "bad handle" 是什么意思。如果你能 post 举例说明你的意思,那将大有帮助。

您可以随时根据 key[.z.W] 检查句柄或句柄列表,其中 returns q

认为有效的句柄列表

您可以实施异步 ping 测试,这将测试进程当前是否繁忙。

q)\q -p 5567
q)\q -p 5568
q)h:hopen each 5566+til 3
q)h
3 4 5i
q){valid::x!count[x]#0b;neg[x]@\:({neg[.z.w]"valid[.z.w]:1b"};`);} h
q)valid
3| 1
4| 1
5| 1
q)neg[h 1]("system";"sleep 10")
q){valid::x!count[x]#0b;neg[x]@\:({neg[.z.w]"valid[.z.w]:1b"};`);} h
q)valid
3| 1
4| 0
5| 1

此外,任何远程删除的句柄都会触发 .z.pc 函数,您可以将自己的逻辑添加到此函数中。