如何从Ant中获取当前PID?

aka*_*ioi 5 ant

我有一个ant任务,在其中我想得到当前进程id(echo $PPID来自命令行的la ).

ksh在Solaris上运行,所以我想我可以这样做:

<property environment="env" />
<target name="targ">
    <echo message="PID is ${env.PPID}" />
    <echo message="PID is ${env.$$}" />
</target>
Run Code Online (Sandbox Code Playgroud)

但那没用; 变量没有被替换.事实证明PPID,SECONDS和某些其他env变量不会成为Ant的表示.

接下来我试试这个:

<target name="targ">
    <exec executable="${env.pathtomyfiles}/getpid.sh" />
</target>
Run Code Online (Sandbox Code Playgroud)

getpid.sh 看起来像这样:

echo $$
Run Code Online (Sandbox Code Playgroud)

这让我得到了生成的shell脚本的PID.更接近,但不是我真正需要的.

我只想要我当前的进程ID,所以我可以在名称中创建一个具有该值的临时文件.有什么想法吗?

小智 6

您可以使用java进程监视工具JPS找到PID,然后可以过滤输出流,如果需要,可以终止进程.看看这个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>
Run Code Online (Sandbox Code Playgroud)


Bri*_*per 3

为什么不直接使用tempfileAnt 任务呢?它可以做你真正想做的事情,同时隐藏所有血淋淋的细节。

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