У меня есть задача муравья, и в ней я хотел бы получить идентификатор текущего процесса (а-ля echo $PPID из командной строки).
Я использую ksh на Solaris, поэтому подумал, что могу просто сделать это:
<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 $$
Это дает мне PID созданного сценария оболочки. Ближе, но не совсем то, что мне нужно.
Мне просто нужен мой текущий идентификатор процесса, чтобы я мог создать временный файл с этим значением в имени. Есть предположения?





Почему бы вместо этого просто не использовать задачу tempfile Ant? Он делает то, что вы действительно хотите, скрывая при этом все кровавые детали.
ваш второй метод не получает pid ANT. Измените сценарий оболочки на (я использую bash, не знаю, такой же ksh):
echo "$PPID"
Вы можете найти PID с помощью инструмента мониторинга java-процессов JPS, затем выходной поток может быть отфильтрован и, если необходимо, процесс может быть остановлен. проверьте этот сценарий уничтожения pid tomcat:
<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>
Это сработало как шарм. Необязательно передавать -l. Это может упростить поиск и замену.
JPS - это только идентификатор процесса любого java-процесса. Как работать с не-Java-процессом .. Пример, как найти идентификатор процесса cmd.exe. по пути "C: \ test \ bin"