如何从Ant中获取当前PID?

问题描述:

我有一个蚂蚁的任务,并在其中我想获得当前的进程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,所以我可以在名称中创建一个具有该值的临时文件。有什么想法吗?

为什么不直接使用tempfile Ant任务呢?它做你真正想要做的,同时隐藏所有的血淋淋的细节。

请参阅http://ant.apache.org/manual/Tasks/tempfile.html

你的第二种方法没有得到ANT的pid。更改shell脚本(我使用bash,我不知道是否KSH是一样的):

echo "$PPID" 

您可以找到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