") 函数运行的 Gwt 进程 ID-6ren"> ") 函数运行的 Gwt 进程 ID-我需要执行一个 tcl 文件,它提供输出 util 我们从 java 停止进程。所以我用 Process proc = Runtime.getRuntime().exec(""); 我需要获取进程 I-6ren">
gpt4 book ai didi

java - 使用 runtime.getExec ("") 函数运行的 Gwt 进程 ID

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:23:20 27 4
gpt4 key购买 nike

我需要执行一个 tcl 文件,它提供输出 util 我们从 java 停止进程。所以我用

Process proc = Runtime.getRuntime().exec("< tcl file >");

我需要获取进程 ID (PID) 来停止进程。我可以多次运行同一个 tcl 文件,所以我无法使用获取执行文件的名称来获取 pid。给我一些在运行外部程序时使用 JAVA 获取进程 ID 的方法。

ps 命令的输出:

25014 pts/0    00:00:00 tclfile29998 pts/0    00:00:09 tclfile30866 pts/0    00:00:00 tclfile

每个实例都是不同的我一次只需要停止指定的进程,不能通过 killall -9 tclfile 命令终止所有进程。

最佳答案

pid 不会暴露给 Java,因为 Java 与平台无关,而 pid 是特定于平台的。所以如果不使用 native 代码,您将无法获得实际的 pid,抱歉。

但是如果你只是想要一个你可以稍后杀死的子进程的句柄,你可以在纯 Java 中做到这一点。 Process对象有方法destroy()(杀死进程)和waitFor()(等待它退出)。在 Java 8 中它还有 isAlive() and destroyForcibly() methods .

好的,在网上查找各种 JRE 中 ProcessImpl 的源代码后,在 Windows 上看起来 ProcessImpl 有一个字段 handle这大概是 CreateProcess 返回的 Win32 句柄,在 Linux 上 UNIXProcess 有一个字段 pid这似乎是进程 ID。如果你真的想变老(并且不受支持,并且可能与特定的 JDK 实现相关联,等等 - 所有常见的警告都适用),如果需要,你可以通过反射访问这些字段。

也就是说,更好的解决方案是自己编写 native 代码,或者委托(delegate)给辅助进程(例如像 Donal Fellows 的回答那样在 bash 中)。

关于java - 使用 runtime.getExec ("<tcl file>") 函数运行的 Gwt 进程 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25728128/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com