Проблема часто возникает, когда Apache Tomcat не удается правильно завершить работу, даже если была отправлена инструкция по отключению. В моем случае, используя Tomcat 8, это происходит с раздражающей регулярностью. К счастью, вы можете использовать Windows PowerShell и netstat
команду, чтобы создать простой сценарий для завершения процесса.
Следующий скрипт PowerShell проанализирует выходные данные, netstat
чтобы найти любой прослушивающий процесс 127.0.0.1:8005
, извлечь его PID и затем завершить этот процесс:
netstat -a -o -n `
| select -skip 4 `
| % {$a = $_ -split ' {3,}'; New-Object 'PSObject' -Property @{Original=$_;Fields=$a}} `
| ? {$_.Fields[1] -match '127\.0\.0\.1\:8005$'} `
| % {Write-Host "Killing PID" $_.Fields[4] "..."; taskkill /F /PID $_.Fields[4] }
Если ваш server.xml
Tomcat настраивает использование другого порта или IP, отредактируйте регулярное выражение в четвертой строке скрипта соответствующим образом.
Наконец, я должен отметить, что в Linux ситуация лучше, потому что вы можете указать Tomcat сохранить его PID в файл во время запуска и использовать переключатель для принудительного завершения работы, позже - скрипт завершения работы для систем nix уже имеет способность убивать процесс и работать с netstat
ним не требуется.