Проблема часто виникає, коли 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
не вимагається.