您可以用命令的 lsof的以获取文件描述符的所有正在运行的进程,但我想这样做是关闭其中的一些描述,而不在于过程中。这可以在Windows上进行的,因此您可以轻松地解除了一些应用程序。

是否有任何命令或功能?

有帮助吗?

解决方案

在Windows下你可以使用一个程序来做到这一点,因为有人写道,插入一个设备驱动程序到正在运行的内核做的程序。顺便说这可能是危险的做到这一点,因为你关闭一个手柄,一个破碎的应用程序是使用后,该应用程序不知道该把手被关闭,并在应用程序打开其他一些无关的对象,它不知道,同样的手柄现在可以参考一些其他不相关的对象。你真的想尽快杀破应用程序。

在Linux的肯定,你可以使用同一种技术。编写一个模组插入运行的内核的程序。与模块进行通信,并告诉它处理关闭。这将是同样危险这样做。

其他提示

我不知道为什么你想这样做,但你应该能够使用gdb进行附加到该进程,然后调用close()的FD。例如:

在一个壳:猫

在另一个壳:

$pidof cat
7213

$gdb -p 7213

...
lots of output
...

(gdb)

现在你告诉gdb来执行关闭(0):

(gdb) p close(0)

$1 = 0

(gdb) c

Continuing.

Program exited with code 01.
(gdb)

在所述第一壳体1得到这样的输出:

cat: -: Bad file descriptor

cat: closing standard input: Bad file descriptor

我不这么认为,但lsof的给你已打开该文件的过程,所以你可以做什么完全杀死进程,或至少发出一个信号,让它退出。

的PID

我怀疑。文件描述符过程本地,stdout为1的所有过程,但他们仍然参考当然独特流。

也许更详细的将是有益的,你正在试图解决的阻塞问题。

有需要是更要做到这一点在Unix上比在Windows。

在Windows中,大多数程序倾向于“锁定”(实际上是否认共享),他们打开的文件,所以他们不能被读取/写入/由另一程序中删除。

在Unix上,大部分的时间,这不会发生。在Unix文件锁定主要是咨询,只会阻止其他锁定的尝试,而不是正常的读/写/删除操作。甚至可以移除的过程的当前目录。

关于本出现在Unix的正常使用试图卸除文件系统(在所有的安装的文件系统的任何参考可阻断卸除)时,唯一的情况

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top