আমি কীভাবে প্রক্রিয়াটি মারা যাব কিন্তু শুনছি?


48

আমি একটি অ্যাপ্লিকেশন বিকাশ করছি যা 3000 বন্দরে শোনেন। স্পষ্টতই এটির বন্দর শোনার একটি উদাহরণ রয়েছে কারণ আমি যখনই এটি শুরু করি তখন এটি শ্রোতা তৈরি করতে পারে না (সি #, টিসিপিপ্লাইস্টার তবে এটি অপ্রাসঙ্গিক) কারণ বন্দরটি ইতিমধ্যে রয়েছে নিয়ে যাওয়া হয়।

এখন, অ্যাপ্লিকেশনটি টাস্ক ম্যানেজারে বিদ্যমান নেই, তাই আমি এর পিআইডি সন্ধান এবং এটি মেরে ফেলার চেষ্টা করেছি, যার ফলে এই আকর্ষণীয় ফলাফল হয়েছে:

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
ERROR: The process "3116" not found.

আমি এই আচরণটি আগে দেখিনি এবং অনুভব করেছি যে কারওর সমাধান আছে কিনা তা দেখার জন্য এটি যথেষ্ট আকর্ষণীয় ছিল।

আপডেট: আমি প্রক্রিয়া এক্সপ্লোরার শুরু করেছি এবং 3000 অনুসন্ধান করেছি এবং এটি পেয়েছি:

<Non-existent Process>(3000): 5552

আমি এটিতে ডানদিকে ক্লিক করেছি এবং "ক্লোজ হ্যান্ডেল" নির্বাচন করেছি। এটি আর প্রসেস এক্সপ্লোরারে নেই, তবে এটি নেটস্পটে প্রদর্শিত হবে এবং অ্যাপটি শ্রোতাদের শুরু করা থেকে বিরত রাখবে।

আপডেট 2: উইন্ডোজের জন্য টিসিপিভিউ পাওয়া গেছে যা প্রক্রিয়াটি দেখায় "<non-existent>"। কারআরপোর্টসগুলির মতো, যখন আমি এই সরঞ্জামটিতে সংযোগটি বন্ধ করার চেষ্টা করি তখন কিছুই হয় না।


রোগীকে মেরে রোগ নিরাময়ের কিছুটা হলেও আপনি যদি কম্পিউটারটি পুনরায় চালু করেন তবে এটি কি থামবে?
Xantec

2
প্রকৃতপক্ষে, লগ আউট এবং আবার ফিরে আসা যথেষ্ট ছিল তবে আমি এখন এটি পুনরুত্পাদন করতে সক্ষম হলাম তাই আমি আরও একটি ভাল সমাধান খুঁজে পেতে চাই ...
Srekel

এখানে তালিকাভুক্ত প্রোগ্রামগুলির কোনও সাহায্য করে কিনা তা পরীক্ষা করে দেখুন
সত্যজিৎ ভাট

1
টিসিপিভিউ 3.05 এর বর্তমান সংস্করণ সহ <নন-এক্সটেন্ট> প্রক্রিয়ার প্রসঙ্গ মেনু থেকে "সংযোগ বন্ধ করুন" সফলভাবে আমার ক্ষেত্রে সংযোগটি সফলভাবে বন্ধ করে দিয়েছে এবং বন্দরটি মুক্তি দিয়েছে।
ভেন্টজি কুনেভ

উত্তর:


13

সকেটে অন্তহীন অপেক্ষাগুলি এড়াতে আপনার প্রোগ্রামটির SO_REUSEADDR এবং SO_RCVTIMEO পরামিতি সহ সেটসকপ্ট ফাংশনটি ব্যবহার করা উচিত :

SO_REUSEADDR : Allows the socket to be bound to an address that is already in use.
SO_RCVTIMEO : Sets the timeout, in milliseconds, for blocking receive calls. 

1
এটি কি এই নির্দিষ্ট সমস্যা (কোনও মৃত প্রক্রিয়া দ্বারা সকেট শ্রবণ) সহ কাউকে সহায়তা করেছে?
rustyx

12

আমাদের একই সমস্যা ছিল এবং মাইক্রোসফ্ট সিস্টেটার্নালস থেকে প্রসেস এক্সপ্লোরার ব্যবহার করে প্রসেস আইডিটি আর খুঁজে পাওয়া যায় না।

দেখা যাচ্ছে যে প্রক্রিয়াটি বেশ কয়েকটি ডাঃ ওয়াটসন প্রক্রিয়া দ্বারা রেফারেন্স করা হয়েছিল। এই প্রক্রিয়াগুলিকে হত্যা করে বন্দরটি মুক্তি পেয়েছে। ডাঃ ওয়াটসন মাইক্রোসফ্টকে মেমরি ডাম্প প্রেরণে ব্যবহৃত হয় এবং এটি বেশ কয়েক ঘন্টা সময় নেয় কারণ ক্রাশটি ঘটেছিল এমন প্রক্রিয়াটি তখন বেশ কয়েক দশক জিবি স্মৃতি মেমরি ধারণ করে।


7

আমি মনে করি আপনার কারুরপোর্টস একবার চেষ্টা করা উচিত

কারআরপোর্টস হল নেটওয়ার্ক মনিটরিং সফটওয়্যার যা আপনার স্থানীয় কম্পিউটারে সমস্ত খোলার টিসিপি / আইপি এবং ইউডিপি পোর্টগুলির তালিকা প্রদর্শন করে। তালিকার প্রতিটি বন্দরের জন্য, প্রক্রিয়াটির নাম, প্রক্রিয়াটির পুরো পথ, প্রক্রিয়াটির সংস্করণ সম্পর্কিত তথ্য (পণ্যের নাম, ফাইলের বিবরণ এবং এই জাতীয়) সহ বন্দরটি খোলা প্রক্রিয়া সম্পর্কিত তথ্যও প্রদর্শিত হবে প্রক্রিয়া তৈরি করা হয়েছিল, এবং ব্যবহারকারী এটি তৈরি করেছেন।

তদতিরিক্ত, কারআরপোর্টস আপনাকে অযাচিত টিসিপি সংযোগগুলি বন্ধ করতে, পোর্টগুলি খোলার প্রক্রিয়াটি হ্রাস করতে এবং টিসিপি / ইউডিপি পোর্টগুলির তথ্য এইচটিএমএল ফাইল, এক্সএমএল ফাইল বা ট্যাব-বিসীমাবদ্ধ পাঠ্য ফাইলে সংরক্ষণ করার অনুমতি দেয়।

কারআরপোর্টস অজানা অ্যাপ্লিকেশনগুলির মালিকানাধীন গোলাপী রঙের সন্দেহজনক টিসিপি / ইউডিপি পোর্টগুলি সহ স্বয়ংক্রিয়ভাবে চিহ্নিত করে (সংস্করণ তথ্য এবং আইকন ছাড়াই অ্যাপ্লিকেশন)

বিকল্প পাঠ


4
এটি "সিস্টেম" প্রক্রিয়া নামের অধীনে তালিকায় প্রদর্শিত হয়। আমি বন্দরে জোর করে আইটেমটি ডানদিকে ক্লিক করার চেষ্টা করেছি কিন্তু কিছুই ঘটেনি।
Srekel

7

সম্ভবত সমস্যাটি হ'ল আপনার প্রক্রিয়াটি আর একটি (শিশু) প্রক্রিয়া শুরু করেছে যা সকেট হ্যান্ডেলটি উত্তরাধিকার সূত্রে পেয়েছে এবং এটি এখনও চলছে।

এটি প্রতিরোধের বিভিন্ন উপায় রয়েছে, উদাহরণস্বরূপ: প্রসেসস্টার্টআইএনফো U ইউসশেলএক্সেসুট = সত্য;


1
ধন্যবাদ, এটি একটি ভাল ছিল। আমি subprocess.call(..., cwd=..., shell=True)পাইথন ওয়েব সার্ভারে একটি অ্যাপ্লিকেশন-লঞ্চার হিসাবে কল করেছিলাম এবং এটি প্রমাণিত হয়েছিল যে সকেটটি মুক্ত করার জন্য আমাকে এই সমস্ত শিশু প্রক্রিয়াটি মেরে ফেলতে হয়েছিল। বিজোড় জিনিসটি হ'ল আমি শেল = ট্রু ব্যবহার করছি। এটি আমাকে যুগে যুগে বিরক্ত করেছিল।
ড্যানিয়েল এফ

আমি মনে করি না যে শেল ব্যবহারের ফলে এই আচরণের ফলাফল হয়। আপনি যদি পিতা-মাতার মৃত্যুর পরে সমস্ত শিশু প্রক্রিয়াটি বন্ধ করতে চান তবে আমার মনে হয় সঠিক উপায়টি হল JOB_OBJECT_LIMIT_KILLटका_JOB_CLOSE পতাকা সহ একটি জব অবজেক্ট তৈরি করা , প্রতিটি শিশু প্রক্রিয়া AssignProcessToJobObject এর সাথে যুক্ত করা , এবং পিতামাতার প্রক্রিয়াটি প্রস্থান করার সময় হ্যান্ডেলটি স্বাভাবিকভাবে বন্ধ হওয়ার অনুমতি দেয়।
qris

1

প্রক্রিয়া এক্সপ্লোরারটিতে আপনি প্রক্রিয়াটি দেখতে পাচ্ছেন ? হ্যাঁ যদি আপনি সেখান থেকে এটি হত্যা করতে পারেন তবে এটি আসলে কী তা তদন্ত করার পরে (আপনি সমস্ত প্রসেসে প্রবাহিত দেখতে পাবেন)


1

আপনার নেটস্ট্যাট কমান্ডের উপর '-b' পতাকা ছুঁড়ানোর চেষ্টা করুন। এটি আপনাকে এক্সিকিউটেবলের নাম বলবে যা বন্দরটি ব্যবহার করছে। তারপরে টাস্ক ম্যানেজারে সেই প্রোক খুঁজে নিন এবং সেখানে এটি মেরে ফেলুন। যদি এটি কার্যকর না হয় তবে পোর্টটি উন্মুক্ত করে রাখা কার্যকর হয় post


আমি এই মুহুর্তে এটি পুনরুত্পাদন করতে পারি না, তবে আমি নিশ্চিত যে প্রক্রিয়াটির নাম অনুসন্ধান করার চেষ্টা করা প্রতিটি অন্যান্য প্রচেষ্টা (এবং সরঞ্জাম) ব্যর্থ হওয়ায় নেটস্যাটও এটি করতে পারত না।
স্ট্রেইল

1

শব্দটি উল্লেখ করা প্রয়োজন ঘোরাফেরা করা এখানে।

বিশদটি http://msdn.microsoft.com/en-us/library/ms739165.aspx এ পাওয়া যাবে

সংক্ষেপে: একটি বিকল্প রয়েছে যা সকেট সিস্টেমকে না পাঠানো ডেটা উপস্থিত থাকলেও সকেটটি বন্ধ করার পরেও উন্মুক্ত রাখতে বলে।

আপনার সি # অ্যাপে আপনি সকেট.সেটসকেট অপশন মাধ্যমে কোনও সম্পর্কিত বিকল্প নির্দিষ্ট করতে পারেন: http://msdn.microsoft.com/en-us/library/1011kecd.aspx

যেহেতু উল্লিখিত সমস্ত জিনিস পাঠানো এবং ক্লায়েন্টদের সাথে সম্পর্কিত, তবে আমাদের কাজের ক্ষেত্রেও একই সমস্যা ছিল, আরও কিছু অনুসন্ধান অনুসন্ধানে প্রকাশ পেয়েছে যে শ্রোতার পক্ষে এখানে উদাহরণ হিসাবে দেখানো হয়েছে যে শ্রোতার জন্য দীর্ঘতর বিকল্পটি নির্দিষ্ট করা যেতে পারে: http://msdn.microsoft.com /library/system.net.sockets.tcplistener.server.aspx

কিছু সহকর্মী প্রায় দুই মিনিটের জন্য অ্যাপ্লিকেশন সমাপ্তি / বন্ধ হওয়ার পরে ওএসের দ্বারা বন্দরে বন্দরের বিষয়ে কথা বলেছিল। এটি দেওয়া, এটি শুনতে আকর্ষণীয় হবে যে নির্দিষ্ট সময়ের পরে বন্দরটি এখনও রাখা হয়েছে কিনা।


বন্দরগুলি তার থেকে বেশি দীর্ঘ জন্য খোলা রাখা হয়েছিল (মনে রাখবেন না কতক্ষণ তবে আমি ছেড়ে দিয়ে রিবুট করার এক ঘন্টা আগে পর্যন্ত)।
স্ট্রেইল

লেনার বিকল্পটি এই বিশেষ ক্ষেত্রে প্রাসঙ্গিক কিনা তা আমি নিশ্চিত নই, কেননা এটি দেখে মনে হয় এটি ক্লোজস্কটে কল করার পরে কী ঘটবে তা কেবল নির্দিষ্ট করে। যেহেতু আমি অ্যাপ্লিকেশনটি হত্যা করছি, আমি সন্দেহ করি যে ফাংশনটি (?) নামে পরিচিত।
স্ট্রেইল

1

আমি এই সমস্যা সম্মুখীন। অবশেষে আমি আমার কারণ খুঁজে পেয়েছি। এটি মূল প্রক্রিয়ার কারণে সি / সি ++ এ পপেন দ্বারা একটি শিশু প্রক্রিয়া শুরু করে। তবে প্যাক্লোজ চালানোর আগে প্রধান প্রক্রিয়া ক্র্যাশ / শাটডাউন। তারপরে বন্দরটি মূল প্রক্রিয়াটি এখনও জীবিত আচরণ করবে এবং এখনও এটি শুনবে।


1
আমি সার্ভারফল্টে এই উত্তরটি সহায়ক বলে খুঁজে পেয়েছি: serverfault.com/a/273727/8856
Harriv

1

Xdebug নিয়ে আমার একই সমস্যা ছিল, এটি পোর্টটি 9000 খোলা রেখেছিল।

আমি "টাস্ককিল / পিড এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স" ব্যবহার করে সেন্টিমিডি দিয়ে বন্ধ করতে পেরেছি।

বন্দর ব্যবহার করে প্রক্রিয়াটির পিডটি "নেটস্ট্যাট -ও" দিয়ে পুনরুদ্ধার করা যায়।

আমার কনফিগারেশনটি ছিল 7 হোম প্রিমিয়াম।


1

আমার একই সমস্যা ছিল এবং এটি দ্বারা স্থির করেছি:

  • সাথে পিআইডি সন্ধান করছি netstat -o
  • প্রসেস এক্সপি দিয়ে এটি হত্যা করুন

মজার বিষয় লক্ষণীয় যে নেটস্যাট কখনও কখনও পিড ফেরত দিতে পারে তবে সংশ্লিষ্ট নির্বাহী নাম নয়!


1

সমস্যাটি ঘটতে পারে যদি মৃত প্রক্রিয়া এক বা একাধিক শিশু প্রক্রিয়া শুরু করে। যদি

BOOL WINAPI CreateProcess(
_In_opt_    LPCTSTR               lpApplicationName,
_Inout_opt_ LPTSTR                lpCommandLine,
_In_opt_    LPSECURITY_ATTRIBUTES lpProcessAttributes,
_In_opt_    LPSECURITY_ATTRIBUTES lpThreadAttributes,
_In_        BOOL                  bInheritHandles,
_In_        DWORD                 dwCreationFlags,
_In_opt_    LPVOID                lpEnvironment,
_In_opt_    LPCTSTR               lpCurrentDirectory,
_In_        LPSTARTUPINFO         lpStartupInfo,
_Out_       LPPROCESS_INFORMATION lpProcessInformation
);

একটি শিশু প্রক্রিয়া শুরু করতে ব্যবহৃত হয়েছিল, এটি উত্তরাধিকারী হ্যান্ডলসের মানের উপর নির্ভর করে, তাই

bInheritHandles = false 

পিতামাতার প্রক্রিয়াটি বন্ধ হয়ে থাকলে এবং ক্লায়েন্ট প্রক্রিয়াটি এখনও চলমান থাকলে উইন্ডোজ পোর্টটিকে অবরুদ্ধ করবে না।


1

অনুরূপ ইস্যুটি দেখেছি যখন মূল কারণটি কিছু শিশু প্রক্রিয়া বন্দরগুলির উত্তরাধিকার সূত্রে তৈরি করা হয়েছিল, প্যারেন্ট প্রসেস ক্র্যাশ হয়েছিল, যখন শিশু প্রক্রিয়া এখনও বন্দরটি ধরে রাখে। রেজোলিউশনটি ছিল শিশু প্রক্রিয়াটি এখনও চলছে এবং এটি বন্ধ করার শনাক্ত করা। উদাহরণস্বরূপ এখানে অ বিদ্যমান বিদ্যমান প্রক্রিয়া পিআইডি ছিল 7336

> wmic process get processid,parentprocessid | findstr/i 7336
7336             23828

এই প্রক্রিয়া বন্ধ করতে:

> taskkill /f /pid 23828

এবং এটি সমস্যার সমাধান করেছে।


0

আমি মনে করি না আপনি কোনও ফায়ারওয়াল ইনস্টল করেছেন (বা কোনও উইন্ডোজ নেটওয়ার্কিংয়ের চেষ্টা করেছেন)?

কিছু ফায়ারওয়াল এই ধরণের আচরণ প্রদর্শন করে এবং বন্দরগুলি উন্মুক্ত রাখতে পারে।

আপনার যদি এটির একটি থাকে তবে এটি অক্ষম করার চেষ্টা করুন এবং তারপরে আপনার প্রোগ্রামটি চালু করুন এবং এটি বন্ধ করুন এবং কী ঘটে তা দেখুন seeing


দুর্ভাগ্যক্রমে সত্যই কোনও বিকল্প নয়, কারণ আমার কম্পিউটারে ফায়ারওয়ালের নিয়ন্ত্রণ আমার নেই।
স্ট্রেইল

@ শ্রেকেল - এটি ফায়ারওয়াল কী? যেহেতু আপনার সমস্যা হচ্ছে, আমি ব্যক্তিগতভাবে ভাবব যে এটিই সমস্যা সৃষ্টি করছে।
উইলিয়াম ইলসুম

0

যেহেতু আপনার প্রক্রিয়াটি সিস্টেম হিসাবে তালিকাবদ্ধ রয়েছে, সম্ভবত আপনি এটি "সিস্টেম" কমান্ড প্রম্পটে হত্যা করতে পারেন। নিয়মিত প্রশাসকের চেয়ে সিস্টেম অ্যাকাউন্টে আরও সুবিধা রয়েছে।

আপনি cmd.exe (সময়সূচী সিস্টেম হিসাবে চালায়) এর জন্য কোনও কার্য নির্ধারিত করে "সিস্টেম" cmd.exe পেতে পারেন:

at 15:23 /interactive "cmd.exe" 

অদূর ভবিষ্যতে কোনও কিছুর জন্য সেই সময়টি পরিবর্তন করুন। আপনি যেমন মেশিন কনসোলে রয়েছেন তা নিশ্চিত করুন (আপনি যদি নিয়মিত টার্মিনাল সার্ভার সেশনে থাকেন তবে আপনি নতুন cmd.exe দেখতে পাবেন না mstscthe কনসোলে লগইন করুন )। আমি এটি করার অন্যান্য উপায়গুলি অনুমান করি তবে এটি অতীতে আমার পক্ষে কাজ করেছিল।


0

আমারও একই সমস্যা ছিল ক্র্যাশ হওয়ার সময় প্রক্রিয়াটি ডিবাগ করা হচ্ছিল, এবং এখনও স্থগিত অবস্থায় একটি ভার্সিতদেবগার.এক্সি প্রক্রিয়া ছিল, যা সম্ভবত প্রক্রিয়াটি ডিবাগ হওয়ার কথা উল্লেখ করেছে। Vsjitdebugger.exe প্রক্রিয়াটিকে হত্যা করা সমস্যার সমাধান করেছে।


0

টিসিপিভিউ এবং প্রসেস এক্সপ্লোরারের একটি হাইব্রিড ব্যবহার আমার পক্ষে কাজ করেছিল;) আমি প্রথমে টিসিপিভিউতে পোর্টটি ব্যবহার করে এমন প্রসেস আইডিতে সন্ধান করেছি। প্রক্রিয়া এক্সপ্লোরারটিতে প্রক্রিয়াটি বিচ্ছিন্ন করে প্রক্রিয়া এক্সপ্লোরার ব্যবহার করে প্রক্রিয়াটিকে হত্যা করে।

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