пятница, 19 марта 2010 г.

Как получить Unix PID в Java-приложении

Для контроля работоспособности сервера я использовал monit. Очень удобная штука, единственной сложностью оказалось то, что monit требовал, чтобы приложение писало свой PID в файл.

В результате недолгих поисков был найден способ узнать PID: Java-приложение должно запустить процесс, который выведет PID родителя. Один из самых простых вариантов - выполнить команду "echo $PPID" командного интерпретатора bash ($PPID - переменная, хранящая PID родительского процесса).

import java.io.*;

public class UnixUtils {

public static String getPid() throws IOException, InterruptedException {

// Запускаем bash с параметром -c, что означает "выполнить команду"
// Командой будет "echo $PPID" - вывести PID родительского процесса
ProcessBuilder pb=new ProcessBuilder("/bin/bash", "-c", "echo $PPID");

Process pr=pb.start();
pr.waitFor();
// Если процесс завершился успешно, вернул код 0, считаем, что он нам вывел
if (pr.exitValue() == 0) {
BufferedReader outReader=new BufferedReader(new InputStreamReader(pr.getInputStream()));
return outReader.readLine().trim();
} else {
return null;
}
}
}