如何从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>
但没有工作;变量不被替代。变成PPID
,SECONDS
,并且某些其他env变量不会将它变成Ant的表示形式。
接下来,我试试这个:
<target name="targ">
<exec executable="${env.pathtomyfiles}/getpid.sh" />
</target>
getpid.sh
看起来是这样的:
echo $$
这让我的催生的shell脚本的PID。更紧密,但不是我所需要的。
我只想要我当前的进程ID,所以我可以在名称中创建一个具有该值的临时文件。有什么想法吗?
答
为什么不直接使用tempfile
Ant任务呢?它做你真正想要做的,同时隐藏所有的血淋淋的细节。
答
你的第二种方法没有得到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>
JPS只会给出任何java进程的进程标识。如何处理非java进程..示例如何找到cmd.exe进程ID。在“C:\ test \ bin”路径上 – 2015-07-14 09:55:23