একটি .BAT থেকে পোর্টটি এটি ব্যবহার করছে তা অনুসন্ধান করে একটি প্রক্রিয়া হত্যা করুন


128

উইন্ডোজে কী 8080 বন্দরটি সন্ধান করতে পারে এবং এটি একটি .BAT ফাইলের মাধ্যমে ব্যবহার করা প্রক্রিয়াটি মেরে ফেলার চেষ্টা করতে পারে?


আমি আপনাকে সেখানে যাওয়ার অংশটি পেতে পারি ... কমান্ড প্রম্পট থেকে 'নেটট্যাট-এ-এন-ও' কমান্ডটি ব্যবহার করুন এবং আপনি প্রক্রিয়াগুলির একটি তালিকা দেখতে পাবেন এবং কোন পোর্টগুলি তারা শুনছে (পাশাপাশি আইপি এবং কিনা তারা অন্য আইপি সংযুক্ত বা না ..) মূল্যবান। ফলাফলগুলি পরিমার্জন করার জন্য অবশ্যই খুব ভাল স্যুইচ থাকবে, তবে আমি তাদের হাতছাড়া করতে পারি না ... আশা করি কেউ এটি তৈরি করতে পারে?
ডেভ

লিনাক্স আপনি করতে পারেন। আপনি যদি সাইগউইন ইনস্টল করেন তবে আপনি ব্যাটেও সক্ষম হবেন
দানি

@ দানি, মাইক: সাইগউইন একটি বিশাল নির্ভরতা এবং এই সমস্যাটি সমাধান করার প্রয়োজন নেই। যদি আপনি ইতিমধ্যে এটি পেয়েছেন তবে এটি ব্যবহার করুন - লিনাক্স কমান্ড লাইন সরঞ্জামগুলি আরও ভাল।
মের্লিন মরগান-গ্রাহাম

উত্তর:


141

আপনাকে শুরু করার জন্য এখানে একটি আদেশ রয়েছে:

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P

আপনি যখন আপনার ব্যাচ ফাইলে আত্মবিশ্বাসী হন, সরিয়ে দিন @ECHO

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P

নোট করুন যে আপনাকে বিভিন্ন ওএস এর জন্য এটি সামান্য পরিবর্তন করতে হবে। উদাহরণস্বরূপ, উইন্ডোজ 7 এ tokens=5পরিবর্তে আপনার প্রয়োজন হতে পারে tokens=4

এটি কীভাবে কাজ করে

FOR /F ... %variable IN ('command') DO otherCommand %variable...

এটি আপনাকে কার্যকর করতে commandএবং এর আউটপুটটিকে লুপ করতে দেয়। প্রতিটি লাইন স্টাফ করা হবে %variableএবং আপনি otherCommandযত খুশি ততবার প্রসারিত করতে পারবেন । %variableপ্রকৃত ব্যবহারের ক্ষেত্রে কেবলমাত্র একটি অক্ষরের নাম থাকতে পারে %V

"tokens=4 delims= "

এটি আপনাকে প্রতিটি লাইনকে সাদা স্থানের মাধ্যমে বিভক্ত করতে দেয় এবং সেই লাইনে চতুর্থ অংশ নিতে এবং এটি স্টাফ করে দেয় %variable(আমাদের ক্ষেত্রে, %%P)। delimsখালি দেখায়, কিন্তু অতিরিক্ত স্থানটি বাস্তবে তাৎপর্যপূর্ণ।

netstat -a -n -o

শুধু এটি চালান এবং খুঁজে। কমান্ড লাইন সহায়তা অনুসারে, এটি "সমস্ত সংযোগ এবং শ্রবণ পোর্ট প্রদর্শন করে।", "সংখ্যার আকারে ঠিকানা এবং পোর্ট সংখ্যা প্রদর্শন করে" ", এবং" প্রতিটি সংযোগের সাথে যুক্ত নিজস্ব প্রক্রিয়া আইডি প্রদর্শন করে "। অন্য কেউ এটির পরামর্শ দেওয়ার পরে আমি এই বিকল্পগুলি ব্যবহার করেছি এবং এটি কাজ করার জন্য ঘটেছে :)

^|

এটি প্রথম কমান্ড বা প্রোগ্রাম ( netstat) এর আউটপুট নেয় এবং এটি দ্বিতীয় কমান্ড প্রোগ্রাম ( findstr) এ প্রেরণ করে । যদি আপনি এটি কমান্ড স্ট্রিংয়ের পরিবর্তে কমান্ড লাইনে সরাসরি ব্যবহার করে থাকেন তবে আপনি |পরিবর্তে ব্যবহার করতে পারেন ^|

findstr :8080

এটি এতে প্রবেশ করা কোনও আউটপুট ফিল্টার করে, কেবল এতে থাকা লাইনগুলিতে ফিরে আসে :8080

TaskKill.exe /PID <value>

প্রক্রিয়া আইডি ব্যবহার করে এটি একটি চলমান কাজকে হত্যা করে।

%%P instead of %P

এটি ব্যাচ ফাইলগুলিতে প্রয়োজন। আপনি যদি কমান্ড প্রম্পটে এটি করেন, আপনি %Pপরিবর্তে ব্যবহার করতে পারেন ।


আপনি টোকেন, delims, ইত্যাদি পরীক্ষা করে দেখুন সঙ্গে খেলা করার প্রয়োজন হতে পারে HELP FORকমান্ড লাইন অন্যান্য বিকল্পগুলি যে অনেকটা দেখতে FORআপনাকে দান করবেন, এবং চেক netstat -?, findstr /?এবং, TaskKill /?আরও বেশি সাহায্যের জন্য।
মের্লিন মরগান-গ্রাহাম

আমি এটি ব্যবহার করে চেষ্টা করব এবং আপনার কাছে ফিরে যাব।
মাইক ফ্লিন

6
ফর / এফ "টোকেন = 5 টিলিমস =" %% পি ইন ('নেটট্যাট-এ -এন -ও ^ | সন্ধানকারী: 8080') ডি টাস্ককিল.এক্সে / এফ / পিআইডি %% পি
মাইক ফ্লাইন

10
এটা অসাধারণ. tokens=4আমি মনে করি উইন্ডোজ এক্সপি এবং tokens=5উইন্ডোজ 7.. /Fহত্যার জন্য জোর করার জন্য একটি ভাল ধারণা ।
স্ট্র্লোক

1
@ MerlynMorgan-গ্রাহাম হিসাবে এই একটি গৃহীত উত্তর থেকে পয়েন্ট যোগ বিবেচনা করুন stackoverflow.com/a/20637662/5243762 এই উত্তরটি পাশাপাশি
IAmSurajBobade

196

কমান্ড প্রম্পট ওপেন করুন এবং নিম্নলিখিত কমান্ডগুলি চালান

 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

, এখানে 3116 প্রক্রিয়া আইডি


হ্যাঁ সর্বত্র
মোহিত সিং

3
খুব দরকারী ! আপনার মনে মনে আমি 0.0: 3000 এর পরিবর্তে 3000 অনুসন্ধান করছি কারণ এটি 0.0.0.0 এর পরিবর্তে 127.0.01 এর অধীনে হতে পারে
লীইয়েলো

2
আপনাকে ধন্যবাদ, দুর্দান্ত কাজ একটি নিয়ন্ত্রণের বাইরে থাকা ওয়েবপ্যাক ডিভ টাস্কটি মেরে ফেলেছে :)
দানজাহ

অথবা আপনি কেবল নেটস্ট্যাট -ানো সরবরাহ করতে পারেন ফাইন্ডস্টার: 9৯৯ill টাস্ককিল / পিআইডি টাইপ ইওরপিডিয়ার / এফ এখানে 9৯৯7 হ'ল বন্দর নম্বর, i ঘন ঘন এই কমান্ডটি ব্যবহার করে দুর্ব্যবহার / ফাঁসি দেওয়া সার্ভারটি মেরে ফেলা হয়।
মোহিত সিং

53

কমান্ড লাইনের নিচে ব্যবহার কমান্ডের নির্দিষ্ট প্রক্রিয়া সন্ধান করতে এখানে 8080 প্রক্রিয়া দ্বারা ব্যবহৃত পোর্ট

netstat -ano | findstr 8080

21424 কমান্ডের নীচে ব্যবহারের প্রক্রিয়াটি হ'ল প্রক্রিয়া আইডি

taskkill /pid 21424 /F 

@ এরালপবি এনজয় করুন :)
সিং রাঠোর

19

মার্লিনের সমাধান ব্যবহারের ফলে অন্যান্য অ্যাপ্লিকেশনগুলিকে ফায়ার ফক্সের মতো হত্যা করা হয়েছিল। এই প্রক্রিয়াগুলি একই বন্দর ব্যবহার করছিল, তবে শ্রোতারূপে নয়:

উদাহরণ:

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

অতএব, অনুসন্ধানকারীগুলিতে "LISTENING" যুক্ত করে এগুলি বাদ দিতে পারেন:

FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P

18

8080 পোর্টে চলমান সমস্ত প্রক্রিয়াটি তালিকাবদ্ধ করতে নিম্নলিখিত করুন।

netstat -ano | "8080" সন্ধান করুন

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       10612

TCP    [::]:8080              [::]:0                 LISTENING       10612

তারপরে প্রক্রিয়াটি হ্রাস করতে নিম্নলিখিত কমান্ডটি চালান run

টাস্কিল / এফ / পিআইডি 10612


13

আপনাকে ধন্যবাদ, কেবল যোগ করার জন্য যে কোনও প্রক্রিয়া বন্ধ হবে না যতক্ষণ না / এফ ফোর্স সুইচটি টাস্ককিলের সাথে প্রেরণ করা না হয়। / টি স্যুইচ সহ, প্রক্রিয়াটির সমস্ত গৌণ থ্রেড বন্ধ হয়ে যাবে।

C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^|
 findstr :2002') DO TaskKill.exe /PID %P /T /F

পরিষেবার জন্য পরিষেবাটির নাম পাওয়া এবং সম্পাদন করা প্রয়োজন:

সার্ভিস নাম বন্ধ করুন


2

কেবলমাত্র সমাপ্তির জন্য:

আমি একটি নির্দিষ্ট বন্দরে সংযুক্ত সমস্ত প্রক্রিয়া মেরে ফেলতে চেয়েছিলাম তবে প্রক্রিয়া শ্রবণ নয়

9001 বন্দরটির জন্য কমান্ডটি (সেন্টিমিডি শেলের মধ্যে) হ'ল:

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P

সন্ধানকারী :

  • r হল এক্সপ্রেশন এবং গ এর সাথে সঠিক চেইনের মিল।
  • [] * স্পেস মিলানোর জন্য for

নেটস্ট্যাট :

  • a -> সব
  • n -> সমাধান করবেন না (দ্রুত)
  • o -> pid

এটি কাজ করে কারণ নেটস্যাটটি সোর্স পোর্টটি তারপরে গন্তব্য পোর্ট এবং তারপরে ESTABLISHED মুদ্রণ করে


2

নীচের বিষয়বস্তু সহ একটি ব্যাট ফাইল তৈরি করেছেন, এটি পোর্ট সংখ্যার জন্য ইনপুট গ্রহণ করে

@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

অবশেষে প্রস্থান করতে "এন্টার" ক্লিক করুন।


@ তুষারপান্দে এটি উইন্ডোজ ট্যাগযুক্ত প্রশ্ন, সুতরাং এটি উইন্ডো স্ক্রিপ্ট, শেল স্ক্রিপ্ট নয়
সিরেশ ইয়ারলগাদদা

1

আপনি যদি 8080 বন্দর শোনার প্রক্রিয়াটি হারাতে চান তবে আপনি পাওয়ারশেল ব্যবহার করতে পারেন। শুধু সাথে Get-NetTCPConnectioncmdlet একত্রিত করুন Stop-Process

উইন্ডোজ 10 বা উইন্ডোজ সার্ভার 2016 এর পাওয়ারশেল 5 এর সাথে পরীক্ষিত হয়ে কাজ করা উচিত However তবে আমার ধারণা, এটি পাওয়ারশেল 5 ইনস্টল থাকা পুরানো উইন্ডোজ সংস্করণগুলিতেও কাজ করা উচিত।

এখানে একটি উদাহরণ:

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"):

0

মার্লিনের প্রতিক্রিয়াটির অনুরূপ, তবে এটি এই ক্ষেত্রেগুলিও পরিচালনা করে:

  • পোর্ট নম্বরটি আসলে আপনি আর খুঁজছেন না এমন আরও দীর্ঘ পোর্ট নম্বরের বাম সাবস্ট্রিং। আপনি একটি সঠিক বন্দর নম্বর অনুসন্ধান করতে চান যাতে আপনি এলোমেলো, নির্দোষ প্রক্রিয়াটিকে হত্যা না করেন!
  • স্ক্রিপ্ট কোডটি একাধিকবার চালাতে সক্ষম হবে এবং প্রতিবার পুরানো, ভুল উত্তর না দেখিয়ে সঠিক হতে হবে।

এটা এখানে:

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.
)

0

পদক্ষেপ:

  1. confআপনার অ্যাপাচি টমক্যাট সার্ভারের ফোল্ডারে যান । আমার ক্ষেত্রে, এটি apache-tomcat-7.0.61\confযেমন আমি অ্যাপাচি-টমক্যাট -7.0.61 ব্যবহার করছি

  2. server.xmlআপনার ইচ্ছানুসারে 8080 থেকে অন্য কোনও বন্দরে পোর্ট নম্বরটি খুলুন এবং পরিবর্তন করুন। উদাহরণস্বরূপ: 8081,8082,8087 ইত্যাদি

  3. এখন binফোল্ডারে যান এবং চালানshutdown.bat

  4. এবার গ্রহনের মাধ্যমে সার্ভারটি পুনরায় চালু করুন।

এখন আপনার প্রকল্পটি কোনও বাধা ছাড়াই কাজ করবে।


0

যদি কেউ পাওয়ারশেল স্ক্রিপ্ট খুঁজছেন:

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)
    }
}

এই ফাংশনটি মূলত উপরের ফাংশনগুলি যা করে তা করে তবে এটি পাওয়ারশেল স্ক্রিপ্টিং ফর্ম্যাটে রয়েছে যাতে আপনি এটি আপনার পাওয়ারশেল প্রোফাইলে যুক্ত করতে পারেন। আপনার প্রোফাইলের অবস্থান অনুসন্ধান করতে পাওয়ারশেল এ গিয়ে টাইপ করুনecho $profile


1
এটি আসলে পাওয়ারশেল স্ক্রিপ্ট নয়, তবে netstatসরঞ্জামের চারপাশে একটি পাওয়ারশেল-ভিত্তিক মোড়ক রয়েছে ।
বহরেপ

0

কমান্ড লাইনে এটি আটকান

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)

আপনি যদি এটির %%Pপরিবর্তে কোনও ব্যাচের পুতে এটি ব্যবহার করতে চান%P


এটি ওএসের ভাষার উপর নির্ভরশীল, কোনও ভাষা কীভাবে এটি সমস্ত ভাষার জন্য কাজ করে?
Jakob

@ জ্যাকব এটি কেবল উইন্ডোজের সেমিডিআর টার্মিনালে চালানো যেতে পারে, কেবলমাত্র। সিএমডি বা .bat ফাইলগুলিতেও
এডুয়ার্ড ফ্লোরিয়েনস্কু

হ্যাঁ, তবে কেবল ইংরেজী ভাষায়, যেহেতু অন্যথায় "LISTENING" OS এর ভাষায় অনুবাদ করা হবে।
Jakob

@ জ্যাকব আমি জানি না যে netstatসরঞ্জামটি অন্য ভাষায় অনুবাদ করা হয়েছে
এডুয়ার্ড ফ্লোরিয়েনস্কু

0

যদি আপনি সিস্টেম দ্বারা এটি কাজ শেষ করতে পারবেন না। এই আদেশ ব্যবহার করে দেখুন

x:> নেট স্টপ http / y


3
"আপনি যদি সিস্টেম দ্বারা" মানে কী? এবং এই উত্তরটি অন্য সমস্তগুলির চেয়ে কীভাবে ভাল?
নিকো হাজেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.