2009-01-12 103 views
4

我有一個螞蟻的任務,並在其中我想獲得當前的進程ID(從命令行la echo $PPID)。如何從Ant中獲取當前PID?

我在Solaris上運行ksh,所以我想我可能只是這樣做:

<property environment="env" /> 
<target name="targ"> 
    <echo message="PID is ${env.PPID}" /> 
    <echo message="PID is ${env.$$}" /> 
</target> 

但沒有工作;變量不被替代。變成PPIDSECONDS,並且某些其他env變量不會將它變成Ant的表示形式。

接下來,我試試這個:

<target name="targ"> 
    <exec executable="${env.pathtomyfiles}/getpid.sh" /> 
</target> 

getpid.sh看起來是這樣的:

echo $$ 

這讓我的催生的shell腳本的PID。更緊密,但不是我所需要的。

我只想要我當前的進程ID,所以我可以在名稱中創建一個具有該值的臨時文件。有什麼想法嗎?

回答

1

你的第二種方法沒有得到ANT的pid。更改shell腳本(我使用bash,我不知道是否KSH是一樣的):

echo "$PPID" 
5

您可以找到PID使用java進程監視工具JPS,然後輸出流可以被過濾,如果需要過程可以被殺害。看看這個tomcat pid kill腳本:

<target name="tomcat.kill" depends="tomcat.shutdown"> 
    <exec executable="jps"> 
    <arg value="-l"/> 
    <redirector outputproperty="process.pid"> 
     <outputfilterchain> 
      <linecontains> 
       <contains value="C:\tomcat\tomcat_node5\bin\bootstrap.jar"/> 
      </linecontains> 
      <replacestring from=" C:\tomcat\tomcat_node5\bin\bootstrap.jar"/> 
     </outputfilterchain> 
    </redirector> 
    </exec> 
    <exec executable="taskkill" osfamily="winnt"> 
    <arg value="/F"/> 
    <arg value="/PID"/> 
    <arg value="${process.pid}"/> 
    </exec> 
    <exec executable="kill" osfamily="unix"> 
    <arg value="-9"/> 
    <arg value="${process.pid}"/> 
    </exec> 
</target> 
+0

JPS只會給出任何java進程的進程標識。如何處理非java進程..示例如何找到cmd.exe進程ID。在「C:\ test \ bin」路徑上 – 2015-07-14 09:55:23