代码之家  ›  专栏  ›  技术社区  ›  Ross Patterson

从Windows命令行程序生成多线程Java程序,产卵器不会结束,直到产卵结束。我怎样才能防止上吊?

  •  1
  • Ross Patterson  · 技术社区  · 15 年前

    短版:

    如何防止Windows中产生的Java进程阻止产卵过程结束?

    长版本:

    我试图从一个从Windows命令行启动的程序中生成一个多线程的Java程序(SE RC,而不是它应该是重要的)。我使用windows的“start”命令来执行,生成的进程已经启动并正确运行。生成过程接收控制返回并完成(nant说“构建成功”),但实际上并没有退出到命令行。当生成的进程最终终止时(可能是几小时后),命令进程将返回,并出现命令行提示。

    例如:

    <target name="start_rc">
        <exec program="cmd" failonerror="false" workingdir="${ross.p5.dir}\Tools\selenium\selenium-server-1.0.1" verbose="true">
            <arg value="/C"/>
            <arg value="start"/>
            <arg value="java"/>
            <arg value="-jar"/>
            <arg path="${ross.p5.dir}\Tools\selenium\selenium-server-1.0.1\selenium-server.jar"/>
            <arg value="-userExtensions"/>
            <arg path="${ross.p5.dir}\Tools\selenium\selenium-server-1.0.1\user-extensions.js"/>
            <arg value="-browserSideLog"/>
            <arg value="-log"/>
            <arg value="${ross.p5.dir}\artifacts\selenium.log"/>
            <arg value="-debug"/>
        </exec>
    </target>
    

    生产:

    C:\Ross>nant start_rc
    NAnt 0.86 (Build 0.86.2898.0; beta1; 12/8/2007)
    Copyright (C) 2001-2007 Gerry Shaw
    http://nant.sourceforge.net
    
    Buildfile: file:///C:/Ross/ross.build
    Target framework: Microsoft .NET Framework 3.5
    Target(s) specified: start_rc
    
    
    start_rc:
    
         [exec] Starting 'cmd (/C start java -jar C:\p5\Tools\selenium\selenium-server-1.0.1\selenium-server.jar -userExtensions C:\p5\Tools\selenium\selenium-server-1.0.1\user-extensions.js -browserSideLog -log C:\p5\artifacts\selenium.log -debug)' in 'C:\p5\Tools\selenium\selenium-server-1.0.1'
    
    BUILD SUCCEEDED
    
    Total time: 4.1 seconds.
    

    …然后什么也没有,直到我关闭Java运行的窗口,然后…

    C:\Ross>
    

    很明显,有什么东西阻止了nant进程终止,但是windows start命令不应该阻止它吗?

    2 回复  |  直到 9 年前
        1
  •  2
  •   martin clayton egrunin    14 年前

    您的执行任务在这方面有问题 产卵 默认为假。从 NAnt documentation :

    获取或设置一个值,该值指示是否应生成应用程序。如果您生成一个应用程序,它的输出将不会被nant记录。默认值为 .

    Ant documentation (请记住,nant是“非ant”,但仍然是…),这里有一个关于exec任务的spawn参数使用的具体示例:

    <property name="browser" location="C:/Program Files/Internet Explorer/iexplore.exe"/>
    <property name="file" location="ant/docs/manual/index.html"/>
    
    <exec executable="${browser}" spawn="true">
        <arg value="${file}"/>
    </exec>
    

    当浏览器任务激发时,Internet Explorer将打开该页,但生成将继续,而不等待输出或任务完成。

        2
  •  0
  •   John Munsch    15 年前

    我不是100%确定,这就是你所追求的,但我认为你想要的是JavaWaveJava。

    摘自Sun JDK 6文档:

    JavaW命令与Java完全相同,除了使用javw没有关联控制台窗口。如果不希望出现命令提示窗口,请使用javaw。但是,如果由于某种原因启动失败,javaw启动程序将显示一个包含错误信息的对话框。

    推荐文章