প্রক্রিয়া মারার করুণাময় উপায়


12

আমার বাশ স্ক্রিপ্টটি সেলেনিয়াম সার্ভার দিয়ে শেষ হওয়ার পরে, স্ক্রিপ্টটি এটি এভাবে মেরে ফেলে:

kill `ps -ef | grep selenium | awk '{ print $2 }'`

এটি কাজ করে এবং এটি সেলেনিয়াম স্ক্রিপ্টটিকে হত্যা করে না, এটি প্রক্রিয়াটি হত্যার চেষ্টাও করে grep seleniumতাই প্রসেস নম্বরটি কিল কমান্ডের কাছে ফিরে আসে, প্রক্রিয়াটি শেষ হয়ে যায়, সুতরাং এটি একটি ত্রুটি বার্তা উত্পন্ন করে শেষ করে। (অন্য কথায়: এটি দুটি প্রক্রিয়া শেষ করে দেয়, তার মধ্যে একটি হ'ল আসল সেলেনিয়াম সার্ভার, অন্যটি একটি সাময়িক প্রক্রিয়া যা আমি এই আদেশটি কীভাবে করছি তার একটি পার্শ্ব প্রতিক্রিয়া))

প্রক্রিয়াটি মেরে ফেলার জন্য আরও কৌতূহলজনক উপায় আছে, এর এই অনিচ্ছাকৃত পার্শ্ব-প্রতিক্রিয়া নেই?

(আমার কাছে এফডব্লিউআইডাব্লু একটি ধারণা ছিল: স্ক্রিপ্টের আগে এই একই স্ক্রিপ্টটি সেলেনিয়াম শুরু হয়, তাই সেলেনিয়াম শুরু করার পরে যদি আমি যদি পিআইডি ক্যাপচার করতে পারি তবে আমি কেবল সেটিকে ধরে রাখতে পারি এবং গ্রেপ্তার করার পরিবর্তে এটি সরাসরি হত্যা করতে পারি) প্রক্রিয়া আইডি। সমস্যাটি হল, আমি জানি না যে পিআইডি কীভাবে পাওয়া যায়, কীভাবে এটি পরিবর্তন করতে পারি এবং কীভাবে পরে স্ক্রিপ্টে এটি উল্লেখ করা যায় But তবে এটি কী আরও ভাল উপায়?)

উত্তর:


12

এটি ব্যবহার pkill seleniumনা করে চেষ্টা করুন বা অন্য কেউই কাজ না করে আপনি অন্য পদ্ধতিতে যেমন পাইপ অনুক্রমের সাহায্যে আপনার পদ্ধতিটি ব্যবহার করতে পারেন

kill `ps -ef|grep -i selenium| grep -v grep| awk '{print $2}'`

pkill আমার সার্ভারে এটির জন্য কাজ করে না, তবে আপনার উন্নত গ্রেপ স্ট্রিপ অনেক সহায়তা করে।
এরিক

20

ব্যবহার করে দেখুন pgrepকমান্ড যা হবে আউটপুট কমান্ড তুমি আগ্রহী এর PID,।

pgrep selenium

প্রকৃতপক্ষে প্রক্রিয়াটি হ্রাস করতে, সহযোগী pkillআদেশটি ব্যবহার করুন ।

pkill selenium

আমি এর কমনীয়তা পছন্দ করি, তবে প্রক্রিয়াটি এর মতো দেখাচ্ছে: "রুট 26401 11997 2 23:20 পিটিস / 1 00:00:00 জাভা -জার / হোম / এলএম / ক্রোন / সেলেনিয়াম-সার্ভার- স্ট্যান্ডলোন ২.২৯.০। জার "তাই আমি কেবল এটিতে পরিবর্তন করেছি pgrep javaএবং এটি কাজ করে :-) ধন্যবাদ!
এরিক

2
আপনি যদি পিগ্রেপকে '-f' পতাকাটি দেন তবে এটি পুরো কমান্ড-লাইনের সাথে প্যাটার্নটির সাথে মিলবে। সুতরাং, এই ক্ষেত্রে খুন pgrep -f seleniumকাজ করা উচিত
মিলস 013

7
ব্যবহার pkillকরা অনেক সহজ। pkillযথাযথ একই মিলের মানদণ্ড ব্যবহার করে pgrep, সুতরাং আপনি এটি 2 এর পরিবর্তে 1 কমান্ডে করতে পারেন (এবং কোনওটির আউটপুটে নির্ভর থাকতে হবে)।
প্যাট্রিক

7

ব্যবহার করার চেষ্টা করুন grep [s]elenium। এটি গ্রেপ প্রক্রিয়াটি খুঁজে পাবে না।


সত্যিই এটি একটি সহজ কৌশল। কেন এটি কাজ করে?

2
@ এই - grepডিফল্টরূপে BREs ব্যবহার করে। অর্থাৎ [এবং ]দেখা argvজন্য grep, কিন্তু এটা কারণ মেলে না [এবং ]দ্বারা আক্ষরিক ব্যবহার করা হচ্ছে grep
ক্রিস ডাউন

আমি প্রায়শই | grep -v grepপাইপের একটি উপাদান ব্যবহার করেছি । তবে এটি বেশ মার্জিত এবং আমি এটি পছন্দ করি!
অ্যালেক্সিয়স

আপনি যে প্রক্রিয়াটির জন্য গ্রেপ করছেন তার একই নামযুক্ত বর্তমান ওয়ার্কিং ডিরেক্টরিতে যদি কোনও ফাইল থাকে তবে এটি (প্রায়শই) পর্যাপ্ত নয়। সুতরাং, সমাধান আমি সাধারণত ব্যবহার করা হয়: ps -ef | grep \[s]elenium। যদিও আমি এটি lsofব্যবহার করার psএবং এর চেয়ে আরও ভাল বিকল্প বলে মনে করেছি grep
মোরাকী

2

killallকমান্ড উল্লিখিত হয়নি, এবং আমি মনে করি এটা থিয়েটারে ঐভাবে নাটক মঞ্চস্থ একটি দরকারী ছাড়াও।

$ killall selenium

-r regexপ্রক্রিয়াটির নামটি এবং এমনকি একটি সময়ের মানের সাথে মিলে যাওয়ার জন্য আপনি একটি নিয়মিত অভিব্যক্তি নির্দিষ্ট করতে বিকল্পটিও ব্যবহার করতে পারেন :

$ killall -o 5m selenium 

5 মিনিটের বেশি পুরানো সমস্ত সেলেনিয়াম প্রক্রিয়া মেরে ফেলে।


এটিকে RHEL / CentOS সংস্করণগুলির জন্য অনন্য বলে মনে হচ্ছেkillall
ইন্দোহাইট

0

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


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

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