回答:
Get-Process -Id (Get-NetTCPConnection -LocalPort portNumber).OwningProcess
C:\> netstat -a -b
(-nを追加して、ホスト名を解決しようとするのを停止します。これにより、処理速度が大幅に向上します。)
TCPViewに対するDaneの推奨事項に注意してください。とても便利に見えます!
-a すべての接続とリスニングポートを表示します。
-b 各接続またはリスニングポートの作成に関連する実行可能ファイルを表示します。よく知られた実行可能ファイルが複数の独立したコンポーネントをホストする場合があり、これらの場合、接続またはリスニングポートの作成に関係するコンポーネントのシーケンスが表示されます。この場合、実行可能ファイルの名前は下部の[]にあり、上部はそれが呼び出したコンポーネントで、TCP / IPに到達するまで同様です。このオプションは時間がかかる可能性があり、十分な権限がないと失敗することに注意してください。
-n アドレスとポート番号を数値形式で表示します。
-o 各接続に関連付けられた所有プロセスIDを表示します。
1234
できtasklist /fi "pid eq 1234"
ます。
WindowsにはネイティブGUIがあります。
または、実行 resmon.exe
、またはタスクマネージャーのパフォーマンスタブから。
このためのGUIが必要な場合は、TCPViewを使用してください。これは、Microsoftが買収した古いSysinternalsアプリケーションです。
Windowsの場合:
netstat -aon | find /i "listening"
netstat -aon | find /i "abhören"
ドイツ語。
FIND: Parameter format not correct
次のコマンドを実行すると、詳細情報を取得できます。
netstat -aon | find /i "listening" |find "port"
「検索」コマンドを使用すると、結果をフィルタリングできます。find /i "listening"
「リスニング」しているポートのみを表示します。/i
大文字と小文字を区別する必要があることに注意してください。そうでない場合は、「listening」と入力します。| find "port"
結果は、特定のポート番号を含むもののみに制限されます。これについては、応答文字列のどこかにポート番号がある結果もフィルタリングすることに注意してください。
FIND: Parameter format not correct
。検索条件の後にスペースを追加する必要があります。これにより、が残りますnetstat -aon | find /i "listening" | find "1234 "
。
{back tick}
" listening {back tick}
"" | find " {back tick}
" port {back tick}
" "(<-エスケープされた引用符に注意してください- back tick
実際のキャラクターを追加すると、それが省略であると考えるため、用語を許しません)
コマンドプロンプトウィンドウを開きます(管理者として)「スタート\検索ボックス」から「cmd」と入力し、「cmd.exe」を右クリックして「管理者として実行」を選択します。
次のテキストを入力して、Enterキーを押します。
netstat -abno
-a すべての接続とリスニングポートを表示します。
-b 各接続またはリスニングポートの作成に関連する実行可能ファイルを表示します。よく知られた実行可能ファイルが複数の独立したコンポーネントをホストする場合があり、これらの場合、接続またはリスニングポートの作成に関係するコンポーネントのシーケンスが表示されます。この場合、実行可能ファイルの名前は下部の[]にあり、上部はそれが呼び出したコンポーネントで、TCP / IPに到達するまで同様です。このオプションは時間がかかる可能性があり、十分な権限がないと失敗することに注意してください。
-n アドレスとポート番号を数値形式で表示します。
-o 各接続に関連付けられた所有プロセスIDを表示します。
"ローカルアドレス"でリッスンしているポートを探します
その直下のプロセス名を見てください。
注:タスクマネージャでプロセスを見つけるには
表示しているポートの横にあるPID(プロセスID)に注意してください。
Windowsタスクマネージャを開きます。
[プロセス]タブを選択します。
手順1でnetstatを実行したときにメモしたPIDを探します。
PID列が表示されない場合は、[表示/列の選択]をクリックします。PIDを選択します。
「すべてのユーザーのプロセスを表示する」が選択されていることを確認します。
コマンドは1つだけ使用してください。
for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /FI "PID eq %a"
ここで9000
、ポート番号に置き換える必要があります。
出力は次のようなものが含まれます:
Image Name PID Session Name Session# Mem Usage
========================= ======== ================ =========== ============
java.exe 5312 Services 0 130,768 K
説明:
次のコマンドの出力からすべての行を反復処理します。
netstat -aon | findstr 9000
すべての行から、PID(%a
ここでは名前は重要ではありません)が抽出され(PIDはその行の5
th番目の要素です)、次のコマンドに渡されます
tasklist /FI "PID eq 5312"
ヘッダーとコマンドプロンプトの戻りをスキップする場合は、次のコマンドを使用できます。
echo off & (for /f "tokens=5" %a in ('netstat -aon ^| findstr 9000') do tasklist /NH /FI "PID eq %a") & echo on
出力:
java.exe 5312 Services 0 130,768 K
findstr :9000
ですが、そうでない場合は変更する必要があります。番号が含まれているアプリも見つかります(たとえば、「80」を検索すると、ポート80、800、8000のアプリも見つかります)。
最初に、ポートを解放するために削除する必要がある特定のタスクのプロセスIDを見つけます。
タイプ
netstat -n -a -o
Windowsコマンドラインプロンプト(cmd)でこのコマンドを実行した後、最後の列と思われるpidを選択します。これが3312だとします。
今タイプしてください
taskkill /F /PID 3312
これで、netstat
コマンドを入力してクロスチェックできます。
注:Windowsでは、このコマンドを直接CMDで実行できない場合があるため、最初に次の手順を実行する必要があります。
スタートメニューから->コマンドプロンプト(コマンドプロンプトを右クリックし、管理者として実行)
コマンドシェルを開いて、次のように入力します(たとえば、ポートは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
findstr 123456
引用符なし)またはfind "123456"
(引用符付き)のいずれかです。(@Josh)
特定のプロセス(PID)がどのポートを使用しているかを調べるには、次のようにします。
netstat -anon | findstr 1234
1234はプロセスのPIDです。[タスクマネージャー→[サービス/プロセス]タブに移動して、アプリケーションのPIDを確認します。]
-n
フラグを2回設定する必要がないことに注意してください。-ano
十分です
Windows 10またはWindows Server 2016上のPowerShell 5を使用して、 Get-NetTCPConnection
コマンドレットをます。古いバージョンのWindowsでも動作するはずです。
のデフォルトの出力にGet-NetTCPConnection
は、何らかの理由でプロセスIDが含まれていないため、少し混乱します。ただし、出力をフォーマットすることでいつでも取得できます。お探しの物件はOwningProcess
です。
ポート443でリッスンしているプロセスのIDを確認するには、次のコマンドを実行します。
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-List
LocalAddress : ::
LocalPort : 443
RemoteAddress : ::
RemotePort : 0
State : Listen
AppliedSetting :
OwningProcess : 4572
CreationTime : 02.11.2016 21:55:43
OffloadState : InHost
検索するプロパティを使用して、出力をテーブルにフォーマットします。
PS C:\> Get-NetTCPConnection -LocalPort 443 | Format-Table -Property LocalAddress, LocalPort, State, OwningProcess
LocalAddress LocalPort State OwningProcess
------------ --------- ----- -------------
:: 443 Listen 4572
0.0.0.0 443 Listen 4572
プロセスの名前を調べたい場合は、次のコマンドを実行します。
PS C:\> Get-Process -Id (Get-NetTCPConnection -LocalPort 443).OwningProcess
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------
143 15 3448 11024 4572 0 VisualSVNServer
GUIツールを使用してこれを行う場合は、SysinternalsのTCPViewがあります。
コマンドプロンプトを開きます-スタート→ 実行 → cmd
、またはスタートメニュー→ すべてのプログラム → アクセサリ → コマンドプロンプト。
タイプ
netstat -aon | findstr '[port_number]'
[port_number]
を、チェックしてヒットする実際のポート番号に置き換えますEnter。
タイプ
tasklist | findstr '[PID]'
を[PID]
上記の手順の番号に置き換えて、を押しEnterます。
netstat -ao
そしてnetstat -ab
あなたにアプリケーションを教えてください、しかしあなたがシステム管理者でないならあなたは「要求された操作は昇格が必要です」を得るでしょう。
これは理想的ではありませんが、SysinternalsのProcess Explorerを使用している場合は、特定のプロセスのプロパティに移動し、[TCP]タブを調べて、目的のポートを使用しているかどうかを確認できます。事が、多分それは誰かを助けるでしょう...
私に役立つ単一行のソリューションはこれです。ポートを3000に置き換えてください:
$P = Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess; Stop-Process $P.Id
編集:変更kill
にStop-Process
よりPowerShellのような言語のために
Get-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess | Stop-Process
これらのツールに従ってください:からCMD:C:\> netstat -anob
と管理権限。
すべてsysinternals.comから。
実行中のプロセスと各プロセスでのスレッドを知りたいだけの場合は、 wmic
。それはあなたがあなたが知ることができないより多くをあなたに与える素晴らしいコマンドラインツールです。
例:
c:\> wmic process list brief /every:5
上記のコマンドは、5秒ごとに簡単に全プロセスリストを表示します。詳細/?
については、Windowsのコマンドを使用するだけです。たとえば、
c:\> wmic /?
c:\> wmic process /?
c:\> wmic prcess list /?
などなど。:)
PowerShellを使用している場合は、次を試してくださいGet-NetworkStatistics
。
> Get-NetworkStatistics | where Localport -eq 8000
ComputerName : DESKTOP-JL59SC6
Protocol : TCP
LocalAddress : 0.0.0.0
LocalPort : 8000
RemoteAddress : 0.0.0.0
RemotePort : 0
State : LISTENING
ProcessName : node
PID : 11552
プログラム的には、たとえばGetTcpTable2()など、iphlpapi.hのものが必要です。MIB_TCP6ROW2のような構造には、所有者のPIDが含まれています。
PowerShellを使用しています... ...これはあなたの友人です(8080をあなたのポート番号に置き換えてください):
netstat -abno | Select-String -Context 0,1 -Pattern 8080
出力例
> TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 2920
[tnslsnr.exe]
> TCP [::]:8080 [::]:0 LISTENING 2920
[tnslsnr.exe]
したがって、この例では、tnslsnr.exe(OracleXEデータベース)はポート8080でリッスンしています。
簡単な説明
Select-String
を使用しnetstat
て、関連するラインの長い出力をフィルタリングします。-Pattern
正規表現に対して各行をテストします。-Context 0,1
各パターンマッチについて、先頭の0行と末尾の1行を出力します。引数としてプロセス名を受け取り、プロセスのnetstat
出力を提供する以下のバッチスクリプトを使用します。
@echo off
set procName=%1
for /f "tokens=2 delims=," %%F in ('tasklist /nh /fi "imagename eq %1" /fo csv') do call :Foo %%~F
goto End
:Foo
set z=%1
echo netstat for : "%procName%" which had pid "%1"
echo ----------------------------------------------------------------------
netstat -ano |findstr %z%
goto :eof
:End
infoとkillを使用した回答に基づいて、私にとっては、1つのコマンドにそれらを組み合わせると便利です。そして、これをcmdから実行して、指定されたポート(例8080)で待機するプロセスに関する情報を取得できます。
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @tasklist /nh /fi "pid eq %i"
またはそれを殺したい場合:
for /f "tokens=3 delims=LISTENING" %i in ('netstat -ano ^| findStr "8080" ^| findStr "["') do @Taskkill /F /IM %i
これらのコマンドをbatファイルに入れることもできます(これらは少し異なります-の代わり%i
に%%i
)。
portInfo.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @tasklist /nh /fi "pid eq %%i"
portKill.bat
for /f "tokens=3 delims=LISTENING" %%i in (
'netstat -ano ^| findStr "%1" ^| findStr "["'
) do @Taskkill /F /IM %%i
次に、cmdからこれを行うことができます。
portInfo.bat 8080
または
portKill.bat 8080
.\portInfo.bat 800
:それはこのような何かを与えるPowerShellでC:\work>for /F "tokens=3 delims=LISTENING" %i in ('netstat -ano | findStr "800" | findStr "["') do (tasklist /fi "pid eq %i" ) C:\work>(tasklist /fi "pid eq 4" ) Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System 4 Services 0 1,820 K
portInfo.bat
powershellターミナルで名前が付けられたファイルに入れてから実行しました.\portInfo.bat 8080
。出力はバッチファイルの内容だけでした。非常によく私は何かを見落としている可能性があります。Windows 10でPowerShell 6.2.3を使用していることに注意してください。通常のコマンドプロンプトでも試してみましたが、結果は同じでした:スクリプトの内容の出力。これを機能させるための重要な情報が欠けていると私は確信しています。
/nh
:@tasklist /nh /fi "pid eq %i"
?そして、正確にドア:Findstr ":8080"