Comment obtenir tous les processus sous une session d'un processus particulier qui utilise un port dans Windows cmd
Je veux lister et tuer tous les processus appartenant à une session d'un processus particulier qui utilise un port. Cela devrait se produire via une commande Windows batch qui accepterait un numéro de port comme entrée.
Par exemple: Supposons qu'un processus PA écoute actuellement sur le port 8081. PA fonctionne sous la session S1 Il existe des processus PB et PC appartenant à la même session que PA. PB et PC fonctionneront sur des ports différents (il n'est pas important sur quels ports ils fonctionnent)
La commande Windows / le fichier batch doit prendre 8081 comme entrée et tuer les processus PA, PB et PC.
Est-ce possible? J'apprécie un peu d'aide à ce sujet car je ne suis pas vraiment bien familiarisé avec les commandes batch / scripts.
Ma tentative a échoué:
(for /F "tokens=2" %%i in (for /f "tokens=5" %a in ('netstat -aon ^| findstr 8081') do tasklist /NH /FI "PID eq %a") do taskkill /NH /FI "SESSIONNAME eq %%i")
Réponses
C'est en fait assez facile dans PowerShell:
# Get the process of the listening NetTCPConnection and the session ID of the process
$SessionId = (Get-Process -Id (Get-NetTCPConnection -State Listen -LocalPort 8081).OwningProcess).SessionId # Get all processes from that session and stop them Get-Process | Where-Object { $_.SessionId -eq $SessionId } | Stop-Process -Force -Confirm:$false
Si vous recherchez un script batch
for /f "tokens=5" %%a in ('netstat -aon ^| findstr 8081 ^| findstr "LISTEN"') do (
for /f "tokens=3" %%b in ('tasklist /NH /FI "PID eq %%a"') do (
for /f "tokens=2" %%c in ('tasklist /NH /FI "SESSIONNAME eq %%b"') do (
taskkill /F /PID %%c
)
)
)
Vous pouvez créer une fonction à partir de ceci:
function kpn($port){ps|?{$_.sessionID-eq(get-NetTcpConnection -sta listen -loc $port)}|kill -fo -confirm:$false}
Et appelle ça comme
kpn(8081)