как найти идентификатор процесса работающего процесса java в windows? а как убить процесс в одиночку?

<p>я хочу убить определенный процесс java в windows, как в linux (<code>ps -aux</code> для получения processid, а затем <code>kill processid</code> для завершения процесса).</p>

<p>вы можете использовать утилиту <code>jps</code>, которая <a href="http://docs.oracle.com/javase/7/docs/technotes/tools/share/jps.html">включена в jre</a> , чтобы найти идентификатор процесса java-процесса. вывод покажет вам имя исполняемого файла jar или имя основного класса.</p><p>затем используйте диспетчер задач windows, чтобы завершить процесс. если вы хотите сделать это в командной строке, используйте</p><pre><code>taskkill /pid %pid% </code></pre>

<p>вы также можете найти pid java-программы с помощью диспетчера задач. вы включаете<strong>pid</strong>и<strong> командная строка </strong>columns <code>view -> select columns</code> и затем сможете найти нужный процесс.</p><p>ваш результат будет примерно таким: <img src="https://i.stack.imgur.com/0xzwh.png" alt="enter image description here"></p>

<p>после установки пути вашего jdk используйте <code>jps</code>. затем вы можете легко убить его с помощью диспетчера задач<br/><code>jps</code> даст вам все процессы java</p>

<p>это будет работать, даже если запущено несколько экземпляров jar</p><pre><code>wmic path win32\_process where "commandline like '%yourname.jar%'" call terminate </code></pre>

<p>решение, которое я нашел, очень просто. используйте wmic и java runtime для определения и уничтожения процесса.</p><p>часть 1: вам нужно поместить какой-то идентификатор в командную строку запуска вашего приложения. например. что-то вроде:</p><pre><code>string id = "com.domain.app"; </code></pre><p>часть 2: когда вы запускаете свое приложение, обязательно включите строку. допустим, вы запускаете его из java, сделайте следующее:</p><pre><code>runtime.getruntime().exec( "c:\...\javaw.exe -cp ... -dwhatever=" + id + " com.domain.app.main" ); </code></pre><p>часть 3: чтобы убить процесс, используйте wmic window. просто убедитесь, что ваше приложение было запущено и содержит ваш идентификатор сверху:</p><pre><code>runtime.getruntime().exec( "wmic process where \"commandline like '%" + id + "%'\" call terminate" ); </code></pre>

<p>в windows xp и более поздних версиях есть команда: <strong>tasklist</strong>, которая перечисляет все идентификаторы процессов.</p><p>чтобы убить процесс в windows, смотрите:</p><p> <a href="https://stackoverflow.com/a/49990/92063">действительно убивает процесс в windows | переполнение стека</a> </p><p>вы можете выполнять os-команды в java:</p><pre><code>runtime.getruntime().exec("your command here"); </code></pre><p>если вам нужно обработать вывод команды, см. пример: <a href="https://stackoverflow.com/questions/1319286/using-runtime-exec-in-java">использование runtime.exec () в java</a> </p>

<p>это специфично для windows . я столкнулся с той же проблемой, когда мне пришлось убить одну конкретную java-программу с помощью taskkill. когда я запускал java-программу, в списке задач отображалась та же самая программа с именем image, установленным как java.exe . но ее уничтожение с помощью <code>taskkill /f java.exe</code> остановит все другие java-приложения, кроме предназначенных, что не требуется.</p><p>поэтому я запускаю ту же программу на java, используя:</p><pre><code>start "myprogramname" java java-program.. </code></pre><p>здесь команда start откроет новое окно и запустит java-программу с заголовком окна, установленным в myprogramname.</p><p>теперь, чтобы убить эту java-программу, используйте следующую команду taskkill:</p><pre><code>taskkill /fi "myprogramname" </code></pre><p>ваша java-программа будет убита только. отдых будет незатронут.</p>