2010-05-17 49 views
1

簡短版本:從Windows命令行程序中產生一個多線程Java程序,spawner將不會結束,直到spawnee結束。我怎樣才能防止掛起?

如何防止Windows中產生的Java進程阻止產卵過程結束?

龍版本:

我試圖催生一個多線程Java程序(硒RC,而不是它應該的問題)從Windows命令行啓動程序(南特的<EXEC>任務,再次,不是這應該很重要)。我正在使用Windows「開始」命令執行此操作,並且生成的進程已啓動並正確運行。產卵過程接收控制回來並結束(NAnt表示「BUILD SUCCEEDED」),但實際上並不退出到命令行。當生成的進程終於終止(可能在數小時後),命令進程返回並出現命令行提示符。

例如:

<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

您的執行任務存在問題菌種默認爲假。從NAnt documentation

獲取或設置一個值,指示是否應該生成應用程序。如果你生成一個應用程序,它的輸出將不會被NAnt記錄。缺省值爲false

Ant documentation(記住,楠是「不螞蟻」,但仍...),還有就是使用exec任務的產卵參數的一個具體的例子:

<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將打開該頁面,但構建將繼續而不等待輸出或任務完成。

+0

謝謝,那正是我需要的答案。我使用nant而不是ant,但它有相同的選項。我仍然認爲有些事情已經被打破了,因爲START不應該讓thangs danglin離開,但我不會爭論成功!現在,如果只有nant doc和ant doc一樣清晰! – 2010-05-17 18:43:59

+0

@羅絲,對,我忘了。事實上,這些任務幾乎是一樣的。但是,爲了適應這個話題,我將編輯我的答案,指向南特網站,而不是ANT。 – 2010-05-17 19:34:14

0

我不是100%確定這是你想要的,但我想你想要的是javaw而不是java。

從Sun JDK 6文檔摘自:

javaw命令與java,除了具有javaw進程沒有關聯的控制檯窗口。如果不希望顯示命令提示符窗口,請使用javaw。但是,如果由於某種原因啓動失敗,javaw啓動器將顯示一個包含錯誤信息的對話框。

相關問題