নির্দিষ্ট প্রক্রিয়া বাদে সমস্ত প্রক্রিয়া কীভাবে হত্যা করা যায়


13

আমার স্থানীয় সার্ভারে, অনেক জাভা প্রক্রিয়া চলমান রয়েছে এবং একই সাথে আমি Eclipse ব্যবহার করছি। এখন যখন আমার প্রসেসগুলি পুনরায় চালু করতে হবে (আমি শেল স্ক্রিপ্টের মাধ্যমে প্রক্রিয়াগুলি শুরু করি), প্রতিটি শুরুর আগে আমাকে পুরাতন প্রক্রিয়াগুলির মাধ্যমে মারতে হবে:

পদ্ধতি 1: - kill -9 $Pid (প্রতিটি প্রক্রিয়া এক এক করে যা সময় সাপেক্ষ)

পদ্ধতি 2: - killall -9 java(সমস্ত প্রক্রিয়ার জন্য - সহজ, তবে গ্রহগ্রহটি খুব অকারণে মারা যাবে)

পদ্ধতির ক্ষেত্রে 2 গ্রহণেরও মৃত্যু হবে যা আমি কখনই চাই না। এ থেকে কোন উপায় আছে? আমি বাজি ধরে বলতে হবে: পি

সম্পাদনা করুন: আমি উবুন্টু 15.04 ব্যবহার করছি।


আপনি কি ওপেনজেডকে ব্যবহার করছেন?
মেথাক্স

না এটি জাভা-7-ওরাকল
আতিক

আমার উত্তরটি দেখুন
মেথাক্স

উত্তর:


17

এই আদেশটি চেষ্টা করে দেখুন:

ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill

এটি জাভা সম্বলিত সমস্ত প্রক্রিয়া অনুসন্ধান করবে এবং গ্রহনটি কার্যকর করে তারপরে তাদের হত্যা করবে


3
নির্বিচারে ব্যবহার না করার জন্য ++ 1 -9। আপনার কখনও কোনও প্রক্রিয়াটি করুণভাবে প্রস্থান করার সুযোগ দেওয়া উচিত।
রোমান

pgrepps | grepআপনি গ্রেপ স্টেটমেন্ট নিজেই হত্যার ঝুঁকি হিসাবে ভাল হিসাবে ভাল ।
abligh

2
@ অবলিগ সমস্যাটি হ'ল আপনার সাথে pgrepকোন পার্থক্যটি গ্রহণা চলছে তা পার্থক্য করতে সক্ষম নয়, এমনকি এমনকি pgrep -lকেবল প্রতিবেদন করবে java। @ মেথক্স, কেবলমাত্র রেফারেন্সের জন্য, অবচয় egrepকরা হয়েছে এবং এটি ব্যবহার করা উচিত নয়, যেহেতু আপনি ঠিক স্ট্রিংয়ের সাথে মিলে যাচ্ছেন তাই আপনার grep -Eপ্রয়োজনও নেই grep -E; তাই ঠিক grep -v "eclipse"(বা আপনি অভিনব হতে চান [...] | grep -F "java" | grep -vF "eclipse | [...]")
kos

@ কোস: অপরিশোধিত:pkill '/java\(.*eclipse\)\@!'
বিলে করুন

@ ব্লাবি কি \@!? যদি এটি কোনও পার্ল- pkillইসেম কাজ করে না, কারণ এটি কেবলমাত্র পূর্বশক্তিদের সমর্থন করে, আমি ইতিমধ্যে pkillনেতিবাচক চেহারাগুলির সাথে ব্যবহার করে একটি সম্পূর্ণ কমান্ডে এই পুরো কাজটি হ্রাস করার চেষ্টা করেছি এবং এটি এই কারণে ব্যর্থ হয়েছে।
kos

12

ব্যবহার awk

ps ax | awk '/java/ && !/eclipse/ {system("kill "$1)}'

কমান্ডটি সমস্ত javaপ্রক্রিয়া হত্যা করে, তবে প্রক্রিয়াটি নয় eclipse


3
আরও মার্জিত (এবং দ্রুত) তারপরে @ মাইথাক্স আইএমএইচও থেকে উত্তর ... ;-)
ফ্যাবি

আমি ফাবির সাথে একমত, চমৎকার!
কোস

1

কেমন :

pgrep -af 'java' | grep -Po '^[^ ]+(?!.*eclipse)' | xargs kill
  • pgrep -af 'java'javaপ্রক্রিয়াগুলির সম্পূর্ণ কমান্ড লাইনে অনুসন্ধান করে তাদের তালিকাভুক্ত করে

  • grep -Po '^[^ ]+(?!.*eclipse)'অনুসন্ধান করা প্রক্রিয়াগুলির মধ্যে নজর রাখুন এবং eclipseতাদের সম্পূর্ণ কমান্ড লাইনে প্রসেসগুলির প্রসেস আইডি পান

  • xargs kill প্রক্রিয়া মেরে ফেলবে।


একটি সংক্ষিপ্ত এবং মার্জিত সমাধানের জন্য +1। মনে রাখবেন যে উপরের ২ য় ধাপে আপনি ব্যবহার করেছেন এমন পার্ল রেজেক্স'স সমর্থিত pkillযদি আরও কার্যকর (শুধুমাত্র একটি কমান্ড :) সমাধান পাওয়া সম্ভব হত pgrep/pkill। দুর্ভাগ্যক্রমে pgrep/ pkillকেবলমাত্র প্রসারিত-রেজেক্সপস (যেমন egrep/grep -E) সমর্থন করে ।
আরিফেল

@ এরিফাল্ট আপনি একেবারেই ঠিক বলেছেন .. পিসিআরই সমর্থন করলে pgrep/ এটি সবচেয়ে দক্ষ হতে pkillপারত ..
হিমাইল

0

jps -m | grep -v eclipse | awk '{print $1}' | xargs -t kill

আপনি ঠিক জাভা কমান্ডের সন্ধান করছেন এবং যে পথে যে জাভা রয়েছে তার সমস্ত কমান্ড নয় তা নিশ্চিত করার জন্য জেপিএস ব্যবহার করুন।


0
ps ax | grep "java" | egrep -v "eclipse" | cut -b1-06 | xargs -t kill

1
কমান্ডগুলি ব্যাখ্যা করা আরও ভাল হত, বরং এটি একটি ক্রিপ্টিক কমান্ড স্ট্রিং দেয়। এছাড়াও, আমার দীর্ঘকাল ধরে চলমান কমান্ড "orkjavagoob.sh" সম্পর্কে
ওয়ালটিনেটর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.