Лео, изучая эту проблему около недели, я думаю, что подход Джуртадо, вероятно, является «лучшим» подходом, который мы можем использовать в Java прямо сейчас. «лучший» в кавычках, потому что у него есть очень неприятный побочный эффект, заключающийся в том, что он в основном «угадывает», какой у вашего ребенка PID.
Если ваше Java-приложение быстро порождает собственные процессы в системе с высокой нагрузкой, НЕТ НИКАКОЙ гарантии, что PID, который вы получаете при вычислении различий, является PID процесса, запущенного текущим потоком, или что PID выбранного вами процесса был даже порожденным нашим приложением (возможно, хост-система уже запускала этот процесс).
При этом, если вы не создаете десятки процессов или собственный процесс, который вы создаете, действительно уникален (некоторые пользовательские утилиты, которые вы поставляете с вашим приложением), тогда этот подход отлично работает, и в этом случае PID собственного процесса, который вы ищете это тот, который вы хотите.
В Windows вы можете использовать «tasklist», как указал Джуртадо, чтобы получить полный список PID и отфильтровать тот, который вам нужен (использование переключателя фильтра /FI не сработало для меня при тестировании).
В любой системе *nix вы можете использовать «ps ax | grep», где NAME — это имя процесса, например «nginx» или «httpd», которое вы хотите отфильтровать, чтобы получить список.
Кроме того, если вам нужно убить блуждающие процессы (например, при выходе из виртуальной машины) в *nix, вы, конечно, можете использовать «kill -9», а в Windows, что интересно, вы можете использовать «тасккилл'.
Вряд ли оптимально, к сожалению.
person
Riyad Kalla
schedule
16.08.2011