Как узнать, запускать и убивать процессы в Java-коде (или C или Python) в * nix - PullRequest
2 голосов
/ 15 апреля 2010

Мне нужно написать модуль контроллера процесса в Linux, который обрабатывает задачи, каждая из которых состоит из нескольких исполняемых файлов. Входными данными для контроллера является XML-файл, который содержит путь к каждому исполняемому файлу и список параметров командной строки, которые должны быть переданы каждому. Мне нужно реализовать следующую функциональность:

  1. Запускать каждый исполняемый файл как самостоятельный процесс
  2. быть в состоянии уничтожить любой из созданных дочерних процессов, независимо от других

Чтобы сделать (2), я думаю, что мне нужно захватить pid при создании процесса, чтобы выдать системную команду kill. Я пытался получить доступ к pid в Java, используя ProcessBuilder, но не нашел простого способа сделать это.

Вся моя другая логика (размещение информации о задачах в БД и т. Д.) Выполнена на Java, поэтому я хотел бы придерживаться этого, но если есть решения, которые вы можете предложить на C, C ++ или Python, я цените их тоже.

Ответы [ 3 ]

3 голосов
/ 15 апреля 2010

Для решения Java вы должны взглянуть на библиотеку apache commons exec . Они проделали большую работу, чтобы сделать ее независимой от платформы, и у них есть отличное руководство .

В python вы можете использовать включенную библиотеку subprocess .

0 голосов
/ 16 апреля 2010

Я не уверен, но если вы запускаете исполняемые файлы из Java, вы можете запускать их в отдельных потоках, а затем вы можете отображать их по своему усмотрению - по имени, по номеру строки или чему-то - и регулярно останавливать этот вмещающий поток как java-thread, который не выглядит элегантным решением (не закрывая файлы и т. д.), но может работать до некоторой степени (до тех пор, пока linux-программа не запускает процесс, освобождающийся от его родитель).

Отдельные команды для закрытия каждого процесса, отправляемые через stdin программам, могут быть другой опцией. Как обрабатывать stdin и stdout, а также другие подводные камни упоминаются здесь довольно подробно: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?

Видимые программы могут даже управляться java.awt.Robot (клавиатура, мышь).

В качестве последней идеи я хотел бы рассмотреть возможность использования новой команды "kill pidof program", которая работает на основе имени, чтобы вы не могли различить два экземпляра одной и той же программы.

Я не знаю apache-lib, упомянутого Стином, но обычно есть очень полезные вещи, я бы порекомендовал поискать там тоже - возможно, в первую очередь.

0 голосов
/ 15 апреля 2010

Вам действительно нужно поискать "сценарии оболочки" в Google. Особенно, если ваш работодатель / инструктор хочет, чтобы вы работали над Linux и имели дело с процессами и т. Д.

Может быть, начать здесь: http://supportweb.cs.bham.ac.uk/documentation/tutorials/docsystem/build/tutorials/unixscripting/unixscripting.html

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