Как я могу получить текущий PID из Ant? - PullRequest
5 голосов
/ 13 января 2009

У меня есть задача муравья, и в ней я хотел бы получить текущий идентификатор процесса (а-ля 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 порожденного сценария оболочки. Ближе, но не совсем то, что мне нужно.

Мне просто нужен мой текущий идентификатор процесса, чтобы я мог создать временный файл с этим значением в имени. Есть мысли?

Ответы [ 3 ]

6 голосов
/ 28 марта 2012

Вы можете найти PID, используя инструмент JPS для мониторинга процесса Java, затем выходной поток может быть отфильтрован и, если необходимо, процесс может быть уничтожен. Посмотрите на скрипт 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>
3 голосов
/ 13 января 2009

Почему бы просто не использовать задачу Ant tempfile? Он делает то, что вы действительно хотите сделать, скрывая при этом все ужасные детали.

См. http://ant.apache.org/manual/Tasks/tempfile.html.

1 голос
/ 13 января 2009

ваш второй метод не получает пид ANT. Измените сценарий оболочки на (я использую bash, я не знаю, совпадает ли ksh):

echo "$PPID"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...