Windows'ta 8080 numaralı bağlantı noktasını arayan ve kullandığı işlemi .BAT dosyası aracılığıyla sonlandırmaya ne deneyebilir?
Windows'ta 8080 numaralı bağlantı noktasını arayan ve kullandığı işlemi .BAT dosyası aracılığıyla sonlandırmaya ne deneyebilir?
Yanıtlar:
İşte başlamanıza yardımcı olacak bir komut:
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P
Toplu dosyanıza güvendiğinizde kaldırın @ECHO
.
FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P
Farklı işletim sistemleri için bunu biraz değiştirmeniz gerekebileceğini unutmayın. Örneğin, Windows 7'de tokens=5
bunun yerine ihtiyacınız olabilir tokens=4
.
Bu nasıl çalışır
FOR /F ... %variable IN ('command') DO otherCommand %variable...
Bu command
, yürütmenizi ve çıktı üzerinde döngü oluşturmanızı sağlar . Her satır doldurulacak %variable
ve otherCommand
istediğiniz kadar, istediğiniz yerde genişletilebilir . %variable
gerçek kullanımda sadece tek harfli bir isim olabilir, örn %V
.
"tokens=4 delims= "
Bu, her satırı beyaz boşluğa bölmenize ve bu satırdaki 4. parçayı alıp içine doldurmanıza %variable
(bizim durumumuzda %%P
) izin verir. delims
boş görünüyor, ancak bu fazladan alan aslında önemli.
netstat -a -n -o
Sadece çalıştırın ve öğrenin. Komut satırı yardımına göre, "Tüm bağlantıları ve dinleme bağlantı noktalarını görüntüler.", "Adresleri ve bağlantı noktası numaralarını sayısal biçimde görüntüler." Ve "Her bağlantıyla ilişkili sahip olma işlem kimliğini görüntüler." Bu seçenekleri başka biri önerdiği için kullandım ve işe yaradı :)
^|
Bu, ilk komutun veya programın ( netstat
) çıktısını alır ve bunu ikinci bir komut programına ( findstr
) iletir . Eğer yerine bir komut dizesi içinde komut satırında doğrudan bu kullandıysanız, kullanırsınız |
yerine ^|
.
findstr :8080
Bu, kendisine iletilen tüm çıktıları filtreler ve yalnızca içeren satırları döndürür :8080
.
TaskKill.exe /PID <value>
Bu, işlem kimliğini kullanarak çalışan bir görevi sonlandırır.
%%P instead of %P
Bu, toplu iş dosyalarında gereklidir. Bunu komut isteminde yaptıysanız, %P
onun yerine kullanırsınız.
HELP FOR
diğer bir çok seçenek görmek için komut satırında FOR
verecek ve kontrol netstat -?
, findstr /?
ve TaskKill /?
hatta daha fazla yardım için.
tokens=4
Sanırım Windows XP ve tokens=5
Windows 7. Ayrıca /F
öldürmeye zorlamak iyi bir fikir .
Komut istemini açın ve aşağıdaki komutları çalıştırın
C:\Users\username>netstat -o -n -a | findstr 0.0:3000
TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 3116
C:\Users\username>taskkill /F /PID 3116
burada 3116 işlem kimliği
Komut satırında belirli bir işlemi bulmak için aşağıdaki komutu kullanın: 8080, işlem tarafından kullanılan bağlantı noktasıdır
netstat -ano | findstr 8080
işlemi öldürmek için aşağıdaki komutu kullanın 21424 işlem kimliğidir
taskkill /pid 21424 /F
Merlyn'in çözümünü kullanmak, diğer uygulamaların Firefox gibi öldürülmesine neden oldu. Bu işlemler aynı bağlantı noktasını kullanıyordu, ancak dinleyici olarak kullanılmıyordu:
Örneğin:
netstat -a -n -o | findstr :8085
TCP 0.0.0.0:8085 0.0.0.0:0 LISTENING 6568
TCP 127.0.0.1:49616 127.0.0.1:8085 TIME_WAIT 0
TCP 127.0.0.1:49618 127.0.0.1:8085 TIME_WAIT 0
Bu nedenle, aşağıdaki gibi findstr'e "LISTENING" ekleyerek bunları hariç tutabilirsiniz:
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
8080 numaralı bağlantı noktasında çalışan tüm işlemleri listelemek için aşağıdakileri yapın.
netstat -ano | "8080" bul
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612
TCP [::]:8080 [::]:0 LISTENING 10612
Ardından işlemi sonlandırmak için aşağıdaki komutu çalıştırın
taskkill / F / PID 10612
Hepinize teşekkür ederim, sadece / F kuvvet anahtarı TaskKill ile birlikte gönderilmedikçe bazı işlemlerin kapanmayacağını eklemek için. Ayrıca / T anahtarı ile, sürecin tüm ikincil konuları kapatılacaktır.
C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^| findstr :2002') DO TaskKill.exe /PID %P /T /F
Hizmetler için, hizmetin adını almak ve yürütmek gerekecektir:
sc stop ServiceName
Sadece tamamlanması için:
Belirli bir bağlantı noktasına bağlı tüm süreçleri öldürmek istedim ama dinleyen süreci değil
9001 bağlantı noktası için komut (cmd kabuğunda):
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr :
netstat :
Netstat kaynak bağlantı noktasını, ardından hedef bağlantı noktasını ve ardından KURULDUĞU yazdırdığı için çalışır.
Aşağıdaki içeriğe sahip bir yarasa dosyası oluşturuldu, bağlantı noktası numarası için girişi kabul eder
@ECHO ON
set /p portid=Enter the Port to be killed:
echo %portid%
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr %portid% ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE
Son olarak çıkmak için "Enter" a tıklayın.
8080 numaralı bağlantı noktasında dinleyen işlemi sonlandırmak istiyorsanız, PowerShell'i kullanabilirsiniz. Sadece Get-NetTCPConnection
cmdlet'i Stop-Process
.
Windows 10 veya Windows Server 2016'da PowerShell 5 ile test edilmiştir ve çalışmalıdır. Ancak, PowerShell 5'in yüklü olduğu eski Windows sürümlerinde de çalışması gerektiğini tahmin ediyorum.
İşte bir örnek:
PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess
Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
Merlyn'in cevabına benzer, ancak bu, şu durumları da ele alıyor:
İşte burada:
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
Adımlar:
Apache tomcat sunucunuzun conf
klasörüne gidin . Benim durumumda, apache-tomcat-7.0.61 kullandığım gibiapache-tomcat-7.0.61\conf
Açın server.xml
ve 8080 olan bağlantı noktası numarasını dilediğiniz gibi başka bir bağlantı noktasına değiştirin. Örneğin: 8081,8082,8087 vb.
Şimdi bin
klasöre gidin ve çalıştırınshutdown.bat
Şimdi sunucuyu tutulma ile yeniden başlatın.
Artık projeniz kesintisiz çalışacak.
Bir Powershell Komut Dosyası arayan biri varsa:
function Search-And-Destroy
{
param ( [Parameter(Mandatory=$true)][string]$port )
$lines = netstat -a -o -n | findstr $port
$ports = @()
ForEach($line In $lines)
{
$res = $($lines -split '\s+')
$ports += $res[5]
}
$ports = $ports | select -uniq
ForEach($port In $ports)
{
echo $(taskkill /F /PID $port)
}
}
Bu işlev temelde yukarıdaki işlevlerin yaptığı şeyi yapar, ancak Powershell komut dosyası biçimindedir, böylece onu Powershell profilinize ekleyebilirsiniz. Profilinizin konumunu bulmak için powershell'e gidin ve yazınecho $profile
netstat
aracı etrafında PowerShell tabanlı bir sarmalayıcıdır .
Bunu komut satırına yapıştırın
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
%%P
Bunun yerine toplu pu'da kullanmak istiyorsanız%P
netstat
Aracın diğer dillere çevrildiğinin farkında değilim
sisteme göre görevi bitiremezsiniz. bu komutu dene
x:> net durak http / y