যদি কোনও লোকাল ডেভেলপমেন্ট সার্ভার দেখায় যে একটি পোর্ট ইতিমধ্যে ব্যবহৃত হচ্ছে, তবে সেই TCP পোর্টে লিসেন করা প্রসেসটি খুঁজে বের করতে macOS-এর অন্তর্নির্মিত lsof কমান্ডটি ব্যবহার করুন। টার্মিনালে, পোর্ট নম্বর এবং একটি লিসেনিং-স্টেট ফিল্টার সহ lsof চালান, তারপর প্রসেসটি বন্ধ করবেন কি না তা সিদ্ধান্ত নেওয়ার আগে রিপোর্ট করা PID ব্যবহার করে প্রসেসটি পরীক্ষা করুন।
TCP পোর্টে লিসেন করা প্রসেসটি খুঁজুন
টার্মিনাল খুলুন এবং ত্রুটি বার্তার পোর্টের সাথে 3000 প্রতিস্থাপন করুন। প্রদর্শিত কমান্ডটি লিখুন; নম্বরটি সাধারণ টেক্সট, তাই কোনও শেল এস্কেপিংয়ের প্রয়োজন নেই।
lsof -nP -iTCP:3000 -sTCP:LISTEN
lsof ইন্টারনেট সকেট সহ প্রসেস দ্বারা খোলা ফাইলগুলির তালিকা তৈরি করে। এখানে, -iTCP:3000 সেই পোর্টের জন্য TCP সংযোগগুলি নির্বাচন করে, এবং -sTCP:LISTEN ফলাফলে কেবল সংযোগের জন্য অপেক্ষারত সকেটগুলিকে ফিল্টার করে। -nP নাম সমাধান করার পরিবর্তে সংখ্যাসূচক ঠিকানা এবং পোর্ট নম্বর প্রদর্শন করতে lsof-কে নির্দেশ দেয়, যা আপনার অনুসন্ধান করা পোর্টের সাথে ফলাফলটির তুলনা করা সহজ করে তোলে। এই বিকল্পগুলি Apple-এর ওপেন-সোর্স macOS lsof ম্যানুয়ালে নথিভুক্ত রয়েছে। Apple-এর macOS lsof ম্যানুয়াল
একটি ফলাফল দেখতে এইরকম হতে পারে; নাম এবং সংখ্যাগুলি কেবল উদাহরণের জন্য, কোনও নির্দিষ্ট Mac-এর রিপোর্ট নয়:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 8421 sam 21u IPv6 ... 0t0 TCP *:3000 (LISTEN)
COMMAND-কে প্রসেসের নাম এবং PID-কে এর প্রসেস আইডি হিসাবে পড়ুন। NAME ফিল্ডটি লোকাল ঠিকানা এবং পোর্ট দেখায়। *:3000 একটি ওয়াইল্ডকার্ড ঠিকানা নির্দেশ করে, অন্যদিকে localhost:3000 বা একটি সাংখ্যিক লুপব্যাক ঠিকানা একটি লুপব্যাক বাইন্ডিং নির্দেশ করে। একটি ওয়াইল্ডকার্ড লিসেনার একাধিক লোকাল ইন্টারফেসে উদ্দেশ্যকৃত সংযোগ গ্রহণ করতে পারে; এটি নিজে থেকেই প্রমাণ করে না যে পরিষেবাটি ইন্টারনেট থেকে অ্যাক্সেসযোগ্য। লিসেনিং ফিল্টারটি কার্যকর কারণ একটি প্রসেসের একই পোর্ট সম্পর্কিত সাধারণ ক্লায়েন্ট সংযোগও থাকতে পারে।
PID-টি কার অধীনে তা যাচাই করুন
macOS-এর প্রসেস তালিকা থেকে আরও বিস্তারিত তথ্যের অনুরোধ করতে প্রাপ্ত ফলাফলের PID ব্যবহার করুন। আপনি যে PID পেয়েছেন তা দিয়ে 8421 প্রতিস্থাপন করুন:
ps -p 8421 -o pid=,ppid=,user=,command=
এটি প্রসেস আইডি, প্যারেন্ট প্রসেস আইডি, অ্যাকাউন্ট নাম এবং কমান্ড লাইন প্রদর্শন করে। কমান্ড লাইনটি লিসেনারটি কোনও ডেভেলপমেন্ট সার্ভার, একটি রানটাইম বা অন্য কোনও অ্যাপ্লিকেশনের অন্তর্ভুক্ত কি না তা সনাক্ত করতে সহায়তা করতে পারে। lsof-এ একটি সংক্ষিপ্ত COMMAND মান সর্বদা প্রজেক্ট বা এটি চালু করা অ্যাপটিকে সনাক্ত করার জন্য যথেষ্ট নয়, তাই যে টার্মিনাল ট্যাব বা অ্যাপ্লিকেশনটি সার্ভারটির মালিক বলে আপনি মনে করছেন তার সাথে তুলনামূলকভাবে পূর্ণাঙ্গ ps আউটপুট মিলিয়ে দেখুন।
যদি lsof কোনও সারি না দেখায়, তবে পোর্ট নম্বরটি সঠিক কিনা এবং অ্যাপ্লিকেশনটি এখনও চলছে কিনা তা পরীক্ষা করুন। সার্ভারটি বন্ধ হয়ে গিয়ে থাকতে পারে, TCP-এর পরিবর্তে UDP ব্যবহার করতে পারে, অথবা এখনও এর লিসেনিং সকেট নাও খুলতে পারে। সেই পোর্টে UDP সকেট পরীক্ষা করতে, চালান:
lsof -nP -iUDP:3000
UDP TCP-এর LISTEN অবস্থা ব্যবহার করে না, তাই এই কোয়েরিতে -sTCP:LISTEN যোগ করবেন না। যদি কোনও ফলাফল উপস্থিত হয়, তবে এর COMMAND এবং PID সূত্র হিসাবে ব্যবহার করুন, তারপর উপরে যেভাবে দেখানো হয়েছে সেভাবে ps দিয়ে সেই PID পরীক্ষা করুন।
যদি কমান্ডটি কোনও ফলাফল না দেখায় বা অনুমতির ত্রুটি দেখায়
অন্য অ্যাকাউন্টের অধীনে চলমান একটি প্রসেস আপনার বর্তমান ব্যবহারকারীর কাছে দৃশ্যমান নাও হতে পারে। আপনি যদি অনুমতি-সম্পর্কিত কোনও বার্তা পান বা সন্দেহ করেন যে অন্য কোনও ব্যবহারকারী সকেটের মালিক, তবে অ্যাডমিনিস্ট্রেটর প্রিভিলেজ সহ TCP কোয়েরিটি পুনরায় চালান:
sudo lsof -nP -iTCP:3000 -sTCP:LISTEN
টার্মিনাল আপনার Mac অ্যাকাউন্টের পাসওয়ার্ড চাইবে। আপনি যখন এটি টাইপ করবেন, অক্ষরগুলি সাধারণত প্রদর্শিত হয় না; শেষ হলে Return টিপুন। ফলাফলটি পর্যালোচনা করতে অ্যাডমিনিস্ট্রেটর অ্যাক্সেস ব্যবহার করুন, তারপর পদক্ষেপ নেওয়ার আগে সংশ্লিষ্ট অ্যাপটি সনাক্ত করুন। যদি কমান্ডটি এখনও কিছুই না দেখায়, তবে পোর্ট বিরোধ চলাকালীন পুনরায় চেষ্টা করুন: ত্রুটি এবং অনুসন্ধানের মধ্যে প্রসেসের অবস্থার পরিবর্তন হতে পারে।
সঠিক অ্যাপ্লিকেশনটি বন্ধ করুন
একটি PID খুঁজে পাওয়া কেবল একটি প্রসেসকে সনাক্ত করে; এটি সমাপ্ত করা নিরাপদ কিনা তা এটি আপনাকে বলে না। আপনি যদি এর মালিককে চিনতে পারেন, তবে যে অ্যাপ্লিকেশন বা টার্মিনাল সেশন এটি শুরু করেছিল তা ব্যবহার করে সার্ভারটি বন্ধ করুন, তারপর আপনার মূল কমান্ডটি পুনরায় চেষ্টা করুন। এটি অ্যাপটিকে স্বাভাবিকভাবে বন্ধ হওয়ার সুযোগ দেয়। প্রসেসটি কী কারণে চালু হয়েছে তা যদি আপনি বুঝতে না পারেন, তবে অপরিচিত সিস্টেম বা ব্যাকগ্রাউন্ড প্রসেস বন্ধ করার আগে প্রথমে কমান্ড লাইন বা প্যারেন্ট PID তদন্ত করুন। lsof বর্তমান সকেটের মালিকানা রিপোর্ট করে; একটি অ্যাপ কেন শুরু হয়েছিল বা কোন প্রজেক্ট কনফিগারেশন সেই পোর্টটি বেছে নিয়েছিল তা এটি ব্যাখ্যা করে না।
আপনার ইনস্টল করা macOS সংস্করণের কমান্ডের বিশদ বিবরণের জন্য, টার্মিনাল man lsof দিয়ে তার স্থানীয় ম্যানুয়াল প্রদর্শন করতে পারে; প্রস্থান করতে q চাপুন। Apple-এর টার্মিনাল নির্দেশিকায় কমান্ডের ডকুমেন্টেশন খুঁজতে man ব্যবহারের বর্ণনা দেওয়া হয়েছে। Mac-এ Terminal দিয়ে শুরু করুন
উৎসসমূহ
macOS lsof ম্যানুয়াল পৃষ্ঠা — Apple Open Source
Mac-এ Terminal দিয়ে শুরু করুন — Apple Support