Если вы используете Java 9 или новее, используйте Process::info()
, чтобы получить объект ProcessHandle.Info
для процесса (если имеется). В зависимости от того, что JVM поддерживает на вашей платформе ОС, это может дать вам общее время ЦП для процесса и время запуска процессов ... которое вы можете использовать для вычисления истекшего времени при некоторых обстоятельствах.
Другая альтернатива в системе Linux - выполнить команду как «/ usr / bin / time your command» и проанализировать последние три строки стандартного вывода, чтобы получить истекшее время, «пользовательское» время ЦП и «система» Процессорное время
Например:
$ time date
Thu Jul 5 20:25:01 AEST 2018
real 0m0.002s
user 0m0.001s
sys 0m0.001s
Захват и анализ последних 3 строк. (Реализация этого в Java оставлена в качестве упражнения ...)
Версия GNU для команды time
имеет параметры, которые также могут использоваться для отображения использования памяти. Это описано в руководстве пользователя.
Некоторые эквивалентные команды для Windows описаны здесь:
Для записи, это (грубо говоря) способ использования time
с использованием ProcessBuilder:
ProcessBuilder pb = new ProcessBuilder(
"sh", "-c", "/usr/bin/time python filename.py");
или
ProcessBuilder pb = new ProcessBuilder(
"/usr/bin/time python filename.py");
Если вы собираетесь запускать команды в подоболочке, используя "sh -c", входная строка оболочки должна быть единственным аргументом команды . Поскольку ProcessBuilder
не понимает цитирование, это означает, что вы должны выполнить разбиение самостоятельно; см. выше.
Чтобы получить GNU время для вывода параметров памяти, вам нужно использовать строку формата, как описано в «man time»; например, * +1036 *
/usr/bin/time -f "%e %s %u %M" command to be run
Обратите внимание, что важно использовать "/ usr / bin / time" вместо "time", поскольку встроенная команда "time" в некоторых оболочках не понимает опцию "-f".