Мой сервис падает при запуске с классическим:
java.rmi.server.ExportException: Listen failed on port: 9999
Как я могу найти процесс его убийства?
Мой сервис падает при запуске с классическим:
java.rmi.server.ExportException: Listen failed on port: 9999
Как я могу найти процесс его убийства?
Просто откройте командную оболочку и введите (скажем, ваш порт 123456):
netstat -a -n -o | find "123456"
Вы увидите все, что вам нужно.
Заголовки:
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:37 0.0.0.0:0 LISTENING 1111
Найдите PID процесса, который использует порт в Windows (например, порт: "9999")
netstat -aon | find "9999"
-a
Отображает все соединения и порты прослушивания.
-o
Отображает идентификатор процесса владения, связанный с каждым соединением.
-n
Отображает адреса и номера портов в числовой форме.
Выход:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
Затем убить процесс с помощью PID
taskkill /F /PID 15776
/F
- указывает на принудительное завершение процесса (ов).
Примечание: вам может потребоваться дополнительное разрешение (запуск от администратора), чтобы убить некоторые определенные процессы
После некоторого возни со сценарием я пришел к этому действию. Скопируйте и сохраните его в файле .bat:
FOR /F "usebackq tokens=5" %%i IN ('netstat -aon ^| find "3306"') DO taskkill /F /PID %%i
Измените 'find "3306" в номере порта, который должен быть свободным. Затем запустите файл от имени администратора. Это убьет все процессы, запущенные на этом порту.
Если вы хотите сделать это программно, вы можете использовать некоторые из следующих параметров в скрипте PowerShell:
$processPID = $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID
Тем не мение; Имейте в виду, что чем точнее вы можете быть, тем точнее будет ваш результат PID. Если вы знаете, на каком хосте должен находиться порт, вы можете сильно его сузить. netstat -aon | findstr "0.0.0.0:9999"
netstat -aon | findstr "0.0.0.0:9999"
вернет только одно приложение и, скорее всего, правильное. Только поиск по номеру порта может привести к возврату процессов, в которых только 9999
, например:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
UDP [fe80::81ad:9999:d955:c4ca%2]:1900 *:* 12331
Наиболее вероятный кандидат обычно заканчивается первым, но если процесс завершился до того, как вы запустили свой скрипт, вы можете получить PID 12331 и убить неправильный процесс.
Это помогает найти PID, используя номер порта.
lsof -i tcp:port_number
Команда:
netstat -aon | findstr 4723
Выход:
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
Теперь вырежьте идентификатор процесса, "10396", используя команду for
в Windows.
Команда:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
Выход:
10396
Если вы хотите сократить 4-е число значения, означает "СЛУШАТЬ", то введите команду в Windows.
Команда:
for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
Выход:
СЛУШАТЬ