অনিলাইনার কমান্ড পিআইডি-র পরিবর্তে কিল দেওয়া টিসিপি পোর্ট নম্বর ব্যবহার করবে?


8

আমি প্রায়শই যেমন

sudo netstat -lpn |grep :8088

আউটপুট দেখুন

tcp6       0      0 :::8088                 :::*                    LISTEN      11189/java

এবং তারপর

sudo kill -kill 11189

আমি ঠিক তেমন একটি সুবিধাজনক কমান্ড চাই killatport 8088যেমন টিসিপি পোর্ট নম্বরটি ভেরিয়েবল হিসাবে ব্যবহার করা হয় এবং আমি পাইপলাইনের জন্য একটি উলামের মতো করতে পারি যা আমার যা করতে চায়, তবে কীভাবে আউটপুট এবং পাইপ থেকে পিআইডি পাই? কিল কমান্ডের কাছে? আমি মনে করি নেটস্ট্যাট থেকে আউটপুট থেকে পিআইডি পেতে আমি সম্ভবত বিশ্রী ব্যবহার করতে সক্ষম হতে পারি তবে কীভাবে আমি সুরক্ষা করব এবং একটি সঠিক পোর্ট ম্যাচ করব যাতে ইনপুট 808080 এবং একইভাবে মেলে না? আমি কি এর পরিবর্তে এটি একটি সি প্রোগ্রাম করব? বা এর মতো একটি ছোট্ট ইউটিলিটি ইতিমধ্যে আছে?


1
সিগ্কিল ব্যবহার করা সাধারণত একটি খারাপ ধারণা । প্রক্রিয়াটি নিজের পরে পরিষ্কার হওয়ার কোনও কারণ আপনি কেন চান না?
গিরিহা

mvn jetty:stopউদাহরণস্বরূপ সার্ভারটি বন্ধ করা ব্যর্থ হতে পারে OutOfMemoryError। আমি যখন জাভা সার্লেটগুলি পুনরায় চালু করি তখন এটি ঘটে যায় যে কোনও নিয়মিত স্টপ এমনকি পোর্টটি উপলভ্য হয় না mvn jetty:stop। কখনও কখনও প্রক্রিয়া OutOfMemoryErrorটিসিপি বন্দরটি একটি নিয়মিত শাটডাউন যেমন মুক্ত করতে পারে এবং তা মুক্ত করতে পারে না mvn jetty:stop
নিক্লাস

1
তবুও, mvn jetty:stopসিআইজিটারএম প্রেরণের মতো নয়, এবং এর জাভিলিএমএল এখনও সাইনটার্ম প্রক্রিয়া করতে সক্ষম হবে যদিও এর অ্যাপ্লিকেশন (গুলি) মেমরির বাইরে রয়েছে।
গিরিহা

উত্তর:



2

একটি কমান্ড এভাবে তৈরি করা যেতে পারে:

netstat -lpn | grep ":1234\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}

ব্যাখ্যা:

  1. netstat -ltpn

    • এটি lটিসিপি ( t) এবং তাদের প্রোগ্রামগুলিতে শ্রবণ পোর্টগুলি ( ) এবং তাদের প্রোগ্রামগুলি ( p) নামগুলিতে পোর্ট নম্বরগুলি সমাধান না করে তালিকাভুক্ত করে n)
  2. grep ":1234\b"

    • এটি :1234সীমানা ( \b) এর পরে অনুসন্ধান করে যা শব্দের শেষ (বা আমাদের ক্ষেত্রে সংখ্যা) নির্দেশ করে। এটি নিশ্চিত করে যে আমরা :12345উদাহরণস্বরূপ ধরছি না ।
  3. awk '{sub(/\/.*/, "", $NF); print $NF}'

    • এই

      • পরিপূরক sub(/regex/,"replacewith", #fieldnumber)
      • এই regex \/.*
      • কিছুর সাথে না ""
      • ক্ষেত্রের $NF, যার অর্থ শেষ ক্ষেত্র (যেমন ক্ষেত্রটি রয়েছে PID/program)
      • তারপর এটি মুদ্রণ print $NF

      রেজেক্সটি \/.*একটি আক্ষরিক /এবং তার পরে সমস্ত কিছুর সাথে মেলে এবং তারপরে আমরা এটিকে কোনও কিছুই দিয়ে প্রতিস্থাপন করব না এটি মূলত মুছে ফেলা, সুতরাং আমরা কেবলমাত্র সেই ক্ষেত্রের পিআইডি নম্বর রেখেছি।

  4. xargs -i kill -kill {}

    • xargs -iএমন একটি প্রোগ্রাম যা আপনাকে পূর্ববর্তী কমান্ডের আউটপুটটিকে অন্য কমান্ডের ইনপুট হিসাবে কাজ করতে দেয়। আমাদের কমান্ড kill -kill {}যেখানে {}, যা আমাদের PID, সংখ্যা হল "পাইপলাইন পূর্ববর্তী কমান্ডের ফলাফল" নির্দেশ করে।

দ্রষ্টব্য: এই পুরো কমান্ডটি কিছুটা বিপজ্জনক হতে পারে কারণ আপনি ঘটনাক্রমে এমন কিছু মারতে পারেন যা আপনি চান না। এটি আরও কিছুটা স্যানিটাইজেশন সহ ব্যবহার করতে পারে। এটি ব্যবহারের সময় আপনি সঠিক পোর্ট নম্বর পেয়েছেন তা নিশ্চিত করুন।

আপনি যদি এটি কোনও ক্রিয়ায় রূপান্তর করতে চান তবে আপনি নিম্নলিখিতগুলিতে আপনার যোগ করতে পারেন ~/.bashrc:

killatport(){
    netstat -lpn | grep ":$1\b" | awk '{sub(/\/.*/, "", $NF); print $NF}' | xargs -i kill -kill {}
}

ব্যবহারগুলি পরিবর্তনগুলি সংরক্ষণ করুন এবং প্রয়োগ করুন source ~/.bashrc। এখন, আপনি এই ফাংশনটি ব্যবহার করতে পারেন:

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