Как я могу получить текущий PID из Ant?

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
5
0
5 471
3

Ответы 3

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

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

ваш второй метод не получает 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>

JPS - это только идентификатор процесса любого java-процесса. Как работать с не-Java-процессом .. Пример, как найти идентификатор процесса cmd.exe. по пути "C: \ test \ bin"

Mr.Pramod Anarase 14.07.2015 12:55

Это сработало как шарм. Необязательно передавать -l. Это может упростить поиск и замену.

David Brossard 21.02.2019 01:52

Другие вопросы по теме