Как ограничить максимальное время выполнения приложения Java из командной строки - PullRequest
1 голос
/ 29 октября 2011

Как мне ограничить максимальное время выполнения при запуске приложения Java из командной строки, например:

java -Xmx10G -cp /weka/weka.jar weka.classifiers.trees.J48 -t /test/test-vector.arff -d /test/test.model

Ответы [ 2 ]

4 голосов
/ 29 октября 2011

Я не верю, что есть что-то встроенное в Java, чтобы сделать это для вас.Опции:

  • Написать класс-оболочку, который запускает исходный класс, но также создает поток таймера, чтобы завершить текущий процесс, если он не завершился вовремя.
  • Использование возможностей операционной системы

В качестве примера последнего, в bash на Unix-подобных системах вы можете использовать ulimit -t [seconds] перед запуском процесса.

РЕДАКТИРОВАТЬ: Как отмечалось в комментариях, не ясно, насколько изящным было бы такое отключение с помощью ulimit - будут ли потоки уничтожены достаточно вежливым способом, позволяющим выполнять блоки finally и т. Д. Это, вероятно, стоит проверить.

РЕДАКТИРОВАТЬ: опять же в соответствии с комментариями, ulimit ограничивает время процессора, а не общее время стены.Это может или не может быть тем, что вы ищете - это зависит от того, связан ли ваш процесс с процессором.

2 голосов
/ 29 октября 2011

Ну, вы можете использовать планировщик Java, чтобы он выключал приложение через определенное время:

http://download.oracle.com/javase/1,5.0/docs/api/java/util/Timer.html

...