ক্লাসিকের সাথে শুরুতে আমার পরিষেবা ক্রাশ:
java.rmi.server.ExportException: Listen failed on port: 9999
এটি হত্যার প্রক্রিয়াটি আমি কীভাবে খুঁজে পাব?
ক্লাসিকের সাথে শুরুতে আমার পরিষেবা ক্রাশ:
java.rmi.server.ExportException: Listen failed on port: 9999
এটি হত্যার প্রক্রিয়াটি আমি কীভাবে খুঁজে পাব?
উত্তর:
কেবল একটি কমান্ড শেল খুলুন এবং টাইপ করুন (আপনার পোর্টটি 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
nestat -aon | findstr 123456
উইন্ডোজে কোনও পোর্ট ব্যবহার করে এমন কোনও প্রক্রিয়ার পিআইডি সন্ধান করুন (উদাহরণস্বরূপ পোর্ট: "9999")
netstat -aon | find "9999"
-a
সমস্ত সংযোগ এবং শ্রবণ পোর্ট প্রদর্শন করে।
-o
প্রতিটি সংযোগের সাথে সম্পর্কিত মালিকানাধীন প্রক্রিয়া আইডি প্রদর্শন করে।
-n
সংখ্যাগত আকারে ঠিকানা এবং পোর্ট নম্বর প্রদর্শন করে।
আউটপুট:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
তারপরে পিআইডি দিয়ে প্রক্রিয়াটি মেরে ফেলুন
taskkill /F /PID 15776
/F
- প্রক্রিয়াটি জোর করে শেষ করার জন্য নির্দিষ্ট করে (এস)।
দ্রষ্টব্য: কিছু নির্দিষ্ট প্রক্রিয়া মারতে আপনার অতিরিক্ত অনুমতি (প্রশাসকের কাছ থেকে চালানো) প্রয়োজন হতে পারে
আপনি যদি এই প্রোগ্রামটিমেটিকভাবে করতে চান তবে আপনি পাওয়ারশেল স্ক্রিপ্টের নীচে আপনাকে প্রদত্ত কয়েকটি বিকল্প ব্যবহার করতে পারেন:
$processPID = $($(netstat -aon | findstr "9999")[0] -split '\s+')[-1]
taskkill /f /pid $processPID
যাহোক; আপনার পিআইডি ফলাফলটি যত বেশি নির্ভুল হতে পারবেন সে বিষয়ে সচেতন থাকুন। আপনি যদি জানেন যে বন্দরটি কোন হোস্টে থাকার কথা, তবে আপনি এটিকে অনেক সংকুচিত করতে পারেন। netstat -aon | findstr "0.0.0.0:9999"
কেবলমাত্র একটি অ্যাপ্লিকেশন এবং স্নেহপূর্ণভাবে সঠিকটির জন্য ফিরে আসবে। কেবল পোর্ট নম্বরে অনুসন্ধান করা আপনাকে সেই প্রক্রিয়াগুলি ফিরিয়ে আনতে পারে যা কেবল এর মধ্যেই ঘটে থাকে 9999
:
TCP 0.0.0.0:9999 0.0.0.0:0 LISTENING 15776
UDP [fe80::81ad:9999:d955:c4ca%2]:1900 *:* 12331
সম্ভবত সম্ভাব্য প্রার্থী সাধারণত প্রথমে শেষ হয় তবে আপনি যদি স্ক্রিপ্টটি চালানোর আগে প্রক্রিয়াটি শেষ হয়ে যায় তবে আপনি পরিবর্তে পিআইডি 12331 এবং ভুল প্রক্রিয়াটি মেরে ফেলতে পারেন।
স্ক্রিপ্ট নিয়ে কিছুটা ঝাঁকুনির পরে আমি এই অ্যাকশনে এসেছি। এটি একটি .bat ফাইলে অনুলিপি করুন এবং সংরক্ষণ করুন:
FOR /F "usebackq tokens=5" %%i IN (`netstat -aon ^| find "3306"`) DO taskkill /F /PID %%i
পোর্ট নম্বরে "3306" "পরিবর্তন করুন যা বিনামূল্যে দরকার। তারপরে প্রশাসক হিসাবে ফাইলটি চালান। এটি এই বন্দরে চলমান সমস্ত প্রক্রিয়া মেরে ফেলবে।
COMMAND:
netstat -aon | findstr 4723
আউটপুট:
TCP 0.0.0.0:4723 0.0.0.0:0 LISTENING 10396
এখন for
উইন্ডোতে কমান্ডটি ব্যবহার করে প্রসেস আইডি, "10396" কেটে দিন ।
COMMAND:
for /f "tokens=5" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
আউটপুট:
10396
আপনি যদি মানটির 4 র্থ সংখ্যাটি কাটাতে চান তবে "LISTENING" এর পরে উইন্ডোতে আদেশ দিন।
COMMAND:
for /f "tokens=4" %a in ('netstat -aon ^| findstr 4723') do @echo %~nxa
আউটপুট:
শোনা
এটি পোর্ট নম্বর ব্যবহার করে পিআইডি খুঁজে পেতে সহায়তা করে।
lsof -i tcp:port_number
'lsof' is not recognized as an internal or external command.
পাওয়ার শেল (কোর-সামঞ্জস্যপূর্ণ) এক-লাইনার কপিপাস্টের পরিস্থিতিগুলি সহজ করতে:
netstat -aon | Select-String 8080 | ForEach-Object { $_ -replace '\s+', ',' } | ConvertFrom-Csv -Header @('Empty', 'Protocol', 'AddressLocal', 'AddressForeign', 'State', 'PID') | ForEach-Object { $portProcess = Get-Process | Where-Object Id -eq $_.PID; $_ | Add-Member -NotePropertyName 'ProcessName' -NotePropertyValue $portProcess.ProcessName; Write-Output $_ } | Sort-Object ProcessName, State, Protocol, AddressLocal, AddressForeign | Select-Object ProcessName, State, Protocol, AddressLocal, AddressForeign | Format-Table
আউটপুট:
ProcessName State Protocol AddressLocal AddressForeign
----------- ----- -------- ------------ --------------
System LISTENING TCP [::]:8080 [::]:0
System LISTENING TCP 0.0.0.0:8080 0.0.0.0:0
একই কোড, বিকাশকারী-বান্ধব:
$Port = 8080
# Get PID's listening to $Port, as PSObject
$PidsAtPortString = netstat -aon `
| Select-String $Port
$PidsAtPort = $PidsAtPortString `
| ForEach-Object { `
$_ -replace '\s+', ',' `
} `
| ConvertFrom-Csv -Header @('Empty', 'Protocol', 'AddressLocal', 'AddressForeign', 'State', 'PID')
# Enrich port's list with ProcessName data
$ProcessesAtPort = $PidsAtPort `
| ForEach-Object { `
$portProcess = Get-Process `
| Where-Object Id -eq $_.PID; `
$_ | Add-Member -NotePropertyName 'ProcessName' -NotePropertyValue $portProcess.ProcessName; `
Write-Output $_;
}
# Show output
$ProcessesAtPort `
| Sort-Object ProcessName, State, Protocol, AddressLocal, AddressForeign `
| Select-Object ProcessName, State, Protocol, AddressLocal, AddressForeign `
| Format-Table