销毁java中的进程不会';t关闭其关联的流

销毁java中的进程不会';t关闭其关联的流,java,process,eclipse-rcp,runtime.exec,Java,Process,Eclipse Rcp,Runtime.exec,我正在EclipseRCP应用程序中调用一个外部进程(比如cmd.exe)。 当我开始这个过程时,一切似乎都很好,我能够运行外部过程 但是,如果我尝试退出进程[比如通过调用process.destroy()API],进程仍然不会退出,即使在调用destroy之后,我也能够在应用程序中运行命令(如DIR、cls..等) 此问题仅在windows 7中观察到,而在windows 8或windows 10操作系统中未观察到。在windows 8和10中,一旦调用destroy,我就无法在视图中键入任何

我正在EclipseRCP应用程序中调用一个外部进程(比如cmd.exe)。 当我开始这个过程时,一切似乎都很好,我能够运行外部过程

但是,如果我尝试退出进程[比如通过调用
process.destroy()
API],进程仍然不会退出,即使在调用destroy之后,我也能够在应用程序中运行命令(如DIR、cls..等)

此问题仅在windows 7中观察到,而在windows 8或windows 10操作系统中未观察到。在windows 8和10中,一旦调用destroy,我就无法在视图中键入任何内容

destroy()API是否依赖于windows平台

我相信,在Windows7中,destroy并没有清除与之相关的“输出\输入”流(这就是为什么我相信我仍然能够执行这些命令)

操作系统是否与清除流有关??我有点困惑


有人能在这件事上透露更多的信息吗

有关正确创建和处理流程的许多好提示,请参见。然后忽略它引用的
exec
,并使用
ProcessBuilder
来创建进程。@AndrewThompson:那么,
进程
实例依赖于运行的平台(OS)?我使用的是
CommandLauncher
API,而不是
Runtime.exec()
“因此,流程实例依赖于运行平台(OS)”,这几乎就是定义。“我正在使用CommandLauncherAPI…”很有趣。你说我应该知道这是什么意思。。从未听说过该API。有关正确创建和处理流程的许多好提示,请参阅。然后忽略它引用的
exec
,并使用
ProcessBuilder
来创建进程。@AndrewThompson:那么,
进程
实例依赖于运行的平台(OS)?我使用的是
CommandLauncher
API,而不是
Runtime.exec()
“因此,流程实例依赖于运行平台(OS)”,这几乎就是定义。“我正在使用CommandLauncherAPI…”很有趣。你说我应该知道这是什么意思。。从没听说过那个API。