как ждать завершения процесса в Java или Clojure - PullRequest
2 голосов
/ 07 февраля 2010

Как я могу получить уведомление, когда процесс, который я не запустил, заканчивается и является ли он способом восстановления его кода выхода и / или вывода? процесс, выполняющий наблюдение, будет работать от имени пользователя root / администратора.

Ответы [ 4 ]

2 голосов
/ 07 февраля 2010

Вы можете проверить, запущен ли в данный момент процесс из java, вызвав команду оболочки, которая выводит список всех текущих процессов и анализирует выходные данные.В Linux / Unix / Mac OS команда PS , в Windows это TaskList .

Для версии PS вам нужно сделать что-то вроде:

ProcessBuilder pb = new ProcessBuilder("ps", "-A");
Process p = pb.start();

BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
// Skip first (header) line: "  PID TTY          TIME CMD"
in.readLine();

// Extract process IDs from lines of output
// e.g. "  146 ?        00:03:45 pdflush"
List<String> runningProcessIds = new ArrayList<String>();
for (String line = in.readLine(); line != null; line = in.readLine()) {
    runningProcessIds.add(line.trim().split("\\s+")[0]);
}

Я не знаю, как можно было бы захватить код выхода или вывод.

1 голос
/ 07 февраля 2010

Нет (не в Unix / Windows, по крайней мере). Вы должны быть родительским процессом и порождать его для сбора кода возврата и вывода.

0 голосов
/ 27 сентября 2012

похоже, что вы могли бы использовать jna, чтобы связать себя с "C" способом ожидания окончания pid (в windows опросите OpenProcess (PROCESS_QUERY_INFORMATION ...), чтобы увидеть, когда он сообщает, что процесс мертв, см. Win32 в ruby. с

0 голосов
/ 07 февраля 2010

Вы можете вроде сделать это. В Unix вы можете написать скрипт для непрерывного отображения списка запущенных процессов и уведомления о том, что искомый процесс больше не найден.

Это псевдокод, но вы можете сделать что-то вроде этого:

while ( true ) {
    str = ps -Alh | grep "process_name"
    if ( str == '' ) {
        break
    }
    wait(5 seconds)
}
raise_alert("Alert!")

Проверьте справочную страницу для ps. У вас варианты могут быть разные. Это те, которые я использую на Mac OSX10.4.

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