কোনও প্রক্রিয়াটি মারা যাওয়ার আগে পর্যন্ত স্নিপেটের বাশ স্নিপেট?


8

আমি একটি শক্তিশালী বাশ স্ক্রিপ্ট লেখার চেষ্টা করছি এবং এটিতে আমি একটি পটভূমি প্রক্রিয়া তৈরি করি। স্ক্রিপ্টের শেষে, আমি এটি হত্যা করতে চাই। আমার এটি পিআইডি আছে

আমি এভাবে কিছু ভাবছিলাম

while [[ ps ef $PID ]] ; do
  kill $PID
  sleep 0.5
done

আরও ভাল কিছু জন্য কোন পরামর্শ? এই পদ্ধতির সাথে কোনও সম্ভাব্য সমস্যা?


মানে না ps -ef?
ব্যবহারকারী1686

1
মাধ্যাকর্ষণ: কেবল বিএসডি স্টাইল বনাম ইউএনএক্স বিকল্পগুলি, তবে ইউএনআইএক্স বিকল্পগুলির সাথে ইএফ আরও ভাল মানায়। আমি নিজে 'পিএস আও পিড' নিয়ে যাব
কাইল ব্র্যান্ড্ট

while [[ ps ef $PID ]]একটি সিনট্যাক্স ত্রুটি। আমি অনুমান আপনি বোঝানো while ps ef $PID
ডেনিস

উত্তর:


10

বারবার কোনও প্রক্রিয়া হত্যার সমস্যাটি হ'ল আপনি নতুন প্রক্রিয়া তৈরির সাথে রেসের শর্ত পেয়েছেন। এটি সম্ভবত সম্ভবত নয়, তবে সম্ভবত আপনি প্রক্রিয়াটি প্রস্থান করবেন এবং আপনি যখন ঘুমাচ্ছেন তখন একই পিআইডি দিয়ে একটি নতুন প্রক্রিয়া শুরু হবে।

আপনি বারবার প্রক্রিয়া মেরে ফেলছেন কেন? প্রক্রিয়াটি প্রস্থান করার কারণে যদি এটি হয় তবে এটি সংকেত পাওয়ার পরে ছাড়তে কিছুটা সময় নিতে পারে, আপনি এটি ব্যবহার করতে পারেন wait:

 kill $PID
 wait $PID

একটি আদর্শ সিস্টেমে আপনাকে কখনই কোনও killবা ইস্যু পুনরাবৃত্তি করতে হবে না kill -9 $PID। আপনার যদি তা করতে চান তবে আপনি যা চালিয়ে যাচ্ছেন তা যা ঠিক করা দরকার তাই আপনি ঠিক করতে পারেন। ইতিমধ্যে আপনি সম্ভবত দৌড়ের অবস্থাকে আঘাত করতে পারবেন না এবং প্রক্রিয়াটি মেরে ফেলার আগে আপনি / প্রো / / পিআইডি / এর টাইমস্ট্যাম্প চেক করে (বলে) এটি থেকে রক্ষা করতে পারেন। যদিও এটি খারাপ হ্যাকেনেসি।


1
পিআইডি কোনও শিশু প্রক্রিয়ার সাথে সম্পর্কিত না হলে এটি কাজ করে না, অর্থাত্ এই স্ক্রিপ্টটি অন্য কোথাও উদ্ভূত প্রক্রিয়াটির নিয়ন্ত্রণের চেষ্টা করছে। bash: wait: pid 32137 is not a child of this shellআমি চেষ্টা করার সময় আমি পেতে । :(
জাস্টিন ফোর্স

9

প্রত্যেকের পদক্ষেপে যাওয়ার পরামর্শ দেওয়ার kill $PIDজন্য kill -9 $PID, আপনাকে কিল -9 ব্যবহারের অকেজো ব্যবহারের কথা মনে করিয়ে দিতে হবে ।

না না না. কিল -9 ব্যবহার করবেন না।

এটি প্রক্রিয়াটি পরিষ্কারভাবে দেখার সুযোগ দেয় না:

  1. সকেট সংযোগ বন্ধ

  2. টেম্প ফাইল পরিষ্কার করুন

  3. এটি দূরে যাচ্ছে তার শিশুদের অবহিত

  4. এর টার্মিনাল বৈশিষ্ট্যগুলি পুনরায় সেট করুন

এবং তাই এবং আরও অনেক কিছু।

সাধারণত, 15 টি প্রেরণ করুন, এবং দ্বিতীয় বা দুটি অপেক্ষা করুন, এবং যদি এটি কাজ করে না, 2 প্রেরণ করুন, এবং যদি এটি কাজ করে না, তবে 1 প্রেরণ করুন that যদি এটি না হয় তবে প্রোগ্রামটি খারাপভাবে আচরণ করা হয়েছে বলে বাইনারি সরান!

কিল -9 ব্যবহার করবেন না। শুধু ফুলের পাত্রটি পরিষ্কার করার জন্য কম্বাইন ফলনকারীকে বাইরে আনবেন না।

এখন, আমি "বাইনারি অংশটি সরান" এর সাথে একমত নই, তবে অগ্রগতি কেবল একটির চেয়ে কম ক্ষতিকারক বলে মনে হচ্ছে kill -9

আমি এখানে উল্লিখিত একই পিআইডি সহ নতুন প্রক্রিয়া তৈরির বিষয়ে জাতি শর্ত সম্পর্কে যত্নের সাথেও একমত ।


0

প্রথমে আপনার সাধারণ কিল, সেকেন্ডের স্লিপ এক্স সংখ্যাটি করুন এবং তারপরেও যদি -9 মারুন। এছাড়াও, এটি এমন একটি বিজোড় পরিস্থিতি বলে মনে হচ্ছে যা আপনি অর্জন করেছেন, সম্ভবত আমাদের আরও বৃহত্তর বিষয়টি ব্যাখ্যা করতে চান।


একমত। এটি যদি কোনও সিগন্টারের পরে সাড়া না দেয় এবং (হত্যার মাধ্যমে ডিফল্টরূপে প্রেরিত সংকেত) বন্ধ হয়ে যায় তবে সম্ভবত ২ য়, ৩ য়, ৪ র্থ, .... এর প্রতিক্রিয়া দেখাবে না, সুতরাং পরবর্তী পদক্ষেপের জন্য আপনাকে সাইনকেল (হত্যা - 9)। অবশ্যই আপনার অবশ্যই নিশ্চিত হওয়া উচিত যে "স্লিপ এক্স সেকেন্ডে" এক্সটি প্রসেসটিকে প্রচুর পরিমাণে বোঝা করা সত্ত্বেও আপনার ডেস্ক-এবং-ছেড়ে চলে যাওয়ার প্রক্রিয়াটি স্বাভাবিক সাফ করার অনুমতি দেয়ার জন্য যথেষ্ট দীর্ঘ - এটি কিছুটা অংশ নিতে পারে সিস্টেমটি থ্র্যাশ করার সময় একটি সেকেন্ড সাধারণত তবে দশক সেকেন্ড।
ডেভিড স্পিললেট

0

সাধারণত আপনি kill $PIDপ্রথমে চেষ্টা করতে চান ,

তারপরে এটি নিখুঁতভাবে প্রস্থান করবে কিনা তা দেখার জন্য এটি কিছুটা ঘুমাতে দিন।

যদি তা না হয় তবে kill -9 $PIDজোর করে এ থেকে মুক্তি পেতে কার্যকর করুন ।


-1

কেন শুধু না

kill -9 $PID


2
কারণ আপনি প্রক্রিয়াগুলিকে পরিষ্কার করে ভালভাবে মারা যাওয়ার সুযোগ দিতে চান, এটিই TERM সিগন্যালটি করে (ডিফল্ট সংকেত)। কেআইএলএল সিগন্যাল ("-9") প্রক্রিয়াগুলিকে সেই সুযোগ দেয় না।
কেটওয়ার

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