【问题标题】:groovy (java): exec() do not detach from process (Intellij IDEA vs Maven+TestNG)groovy (java): exec() 不会从进程中分离 (Intellij IDEA vs Maven+TestNG)
【发布时间】:2013-06-11 13:39:44
【问题描述】:

我有启用了 TestNG 和 Surefire 插件的 Groovy Maven2 测试项目。

我想在最后一个测试方法中启动外部进程(启动一些 *.exe 文件的 *.cmd 文件),完成我的测试并在测试后让进程运行。

我尝试了以下代码:

1 次尝试

def builder = new ProcessBuilder('cmd','/c <name>.cmd')
builder.directory( ( new File( <path_to_working_directory> ) ) )
builder.start()

2 次尝试(带和不带启动 cmd 选项)

Runtime.getRuntime().exec( "cmd /c start <name>.cmd", null , ( new File( <path_to_working_directory> ) ) )

3 次尝试

( new AntBuilder() ).exec(
    dir: "<path_to_working_directory>",
    executable: "<name>.cmd"
)     

.cmd 在哪里:

set path=<path_to_execFile>;%path%
start <execFileName>.exe

当我通过“运行”功能 (Alt+Shift+F10) 从 Intellij IDEA 启动这些代码时,代码成功执行,进程启动并在测试完成后运行。

当我从 Intellij IDEA Maven 任务启动这些代码时,干净的 Maven 安装(甚至来自 Jenkins 的 Maven 任务)进程成功启动,但测试仍在运行。我需要手动杀死它。当我手动终止测试进程(Maven 进程)时,我启动的外部进程继续按预期工作。

这个挂起的测试过程让我现在很头疼。

我查看了很多材料,但没有找到任何根本原因、修复甚至解决此问题的方法。我看到我所有的尝试(也许除了 AntBuilder() 之外)都创建了分离的进程。我想这可以与JVM设置相关联。但我找不到哪一个。

我也试过了

"full command to run my cmd".execute()

但这对我也没有帮助。

你能帮我解决这个问题吗?

提前致谢!

【问题讨论】:

    标签: maven-2 exec testng runtime.exec processbuilder


    【解决方案1】:

    所以,我在这里看不到任何关于我的问题的答案。但我有一些更新。

    我发现我可以使用 PsExec 工具代替直接 cmd 调用:

    def builder = new ProcessBuilder( 'psexec', 'cmd', '/c', '<name>.cmd' )
    builder.directory( ( new File( <path_to_working_directory> ) ) )
    builder.start()
    

    当我仅从干净的 Maven(不是从 Jenkins)启动它时,这段代码运行良好:进程已启动,Maven 任务成功完成,进程继续运行。

    但在执行此代码作为某些 Maven2 Jenkins 任务的一部分时,我再次面临问题:psexec 已启动,但 Jenkins 任务正在运行,并且在我手动终止 Jenkins 任务之前我的进程没有启动。

    为了避免这个问题,我创建了简单的附加 Groovy 服务脚本,我在初始机器准备期间在目标机器上手动启动 listen mode(和 Writing a TCP Server)。此脚本始终在机器上运行。

    我将命令文件的名称发送到此侦听器以从我的测试中执行我从 Jenkins 启动并成功执行所有 cmd:进程启动,Jenkins 任务成功完成,进程继续运行。我在这个监听器中使用了 processbuilder。

    发送姓名我使用simple socket (Writing a TCP Client)

    另外,我找到了how to detach child from process tree on win32?。但对我来说,我认为我的系统看起来更 Groovy。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-19
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      • 2012-04-13
      相关资源
      最近更新 更多