<defunct> প্রক্রিয়া কী এবং কেন এটি খুন হয় না?


180

ক্রোম ব্রাউজারটি প্রতিক্রিয়াশীল ছিল না এবং আমি এটি হত্যার চেষ্টা করেছি, তবে প্রক্রিয়াটি অদৃশ্য হওয়ার পরিবর্তে <defunct>ডানদিকে এসেছিল এবং নিহত হয় নি:

এখানে চিত্র বর্ণনা লিখুন

<defunct>একটি প্রক্রিয়া জন্য কি এবং কেন এটি হত্যা করা হয় না?


3
গৃহীত উত্তরে উল্লেখ করা হয়েছে যে " kill -9 PIDকাজ করে না"। এটি আংশিক সত্য: বাস্তবে, কোনও হত্যার কাজ হবে না। তদ্ব্যতীত -9 সর্বশেষ অবলম্বন হিসাবে ব্যবহার করা উচিত। 99% সময় পিতামাতার প্রক্রিয়াটির ডিফল্ট কিল এটি হত্যা করে এবং সমস্ত শিশুকে কাটাবে। একটি "ডিফল্ট কিল" হ'ল একটি সাইনটারম (-15)। আমি -9 (সিগকল) এর অনুরাগীদের স্ট্যাকওভারফ্লো.com
মাইক এস

উত্তর:


172

আপনার আউটপুট থেকে আমরা একটি "অচল" দেখতে পাচ্ছি, যার অর্থ প্রক্রিয়াটি তার কাজটি সম্পূর্ণ করেছে বা দূষিত বা হত্যা করা হয়েছে, তবে এর শিশু প্রক্রিয়াগুলি এখনও চলছে বা এই পিতামাতার প্রক্রিয়াটি তার শিশু প্রক্রিয়াটি পর্যবেক্ষণ করছে। এই জাতীয় প্রক্রিয়াটি হারাতে মারুন -9 পিআইডি কাজ করে না। আপনি এই আদেশ দিয়ে তাদের হত্যা করার চেষ্টা করতে পারেন তবে এটি বার বার এটি প্রদর্শিত হবে।

এই ডিফল্ট প্রক্রিয়াটির মূল প্রক্রিয়াটি নির্ধারণ করুন এবং এটি হত্যা করুন kill এটি জানতে কমান্ডটি রান করুন:

ps -ef | grep defunct

UID          PID     PPID       C    STIME      TTY          TIME              CMD
1000       637      27872      0   Oct12      ?        00:00:04 [chrome] <defunct>
1000      1808      1777       0    Oct04     ?        00:00:00 [zeitgeist-datah] <defunct>

তারপরে kill -9 637 27872, তারপরে যাচাই প্রক্রিয়াটি শেষ হয়ে গেছে ps -ef | grep defunct


13
আপনি "অপসারণ" প্রক্রিয়াটি হত্যা করতে পারবেন না। আপনি কেবলমাত্র তার পিতামাতাকে মেরে একটি প্রক্রিয়া সারণিতে এর প্রবেশের মোছার গতি বাড়িয়ে দিতে পারেন।
jfs

57
পিপিড 1( init) হলে কী হবে ? মনে করুন আমাকে অপেক্ষা করতে হবে?
লুক

7
কিলটি স্বয়ংক্রিয় করতে, আপনি এটিও করতে পারেন (আপনি আউটপুট থেকে কোন বাইটগুলি কাটাচ্ছেন তা পরিবর্তন করতে হতে পারে):ps -ef | grep defunct | grep -v grep | cut -b8-20 | xargs kill -9
ওয়ারেন

3
ধন্যবাদ দ্বিতীয় গ্রেপ না করে আপনি এটিকে কিছুটা খাটো এবং (ইমো) আরও সহজ করে তুলতে পারেন। প্রথম গ্রেপটিকে কেবল grep [d]efunctএকই বা একই রূপে পরিবর্তন করুন এবং এটি নিজের সাথে মেলে না।
Thor84no

4
@ আগত, আপনি একটি বিঘ্নিত প্রক্রিয়া মারতে পারবেন না - এমনকি একটি সিক্কিল দিয়েও। তদুপরি, আপনি মারাত্মক -9 বেশ নির্বিচারে ব্যবহার করছেন। স্ট্যাকওভারফ্লো . com/ প্রশ্নগুলি / 90৯০৪১৫/২ দেখুন । আপনি বিলুপ্ত সন্তানদেরকে হত্যা করতে চান তাহলে, আপনি চেষ্টা করতে পারেন: parents_of_dead_kids=$(ps -ef | grep [d]efunct | awk '{print $3}' | sort | uniq | egrep -v '^1$'); echo "$parents_of_dead_kids" | xargs killkill -9আপনার ইচ্ছা অনুযায়ী 30 সেকেন্ড বা তারপরে স্ক্রিপ্টটি পুনরায় চালু করুন । (দ্রষ্টব্য যে আমি বিশেষভাবে হত্যার বিষয়টি অস্বীকার করি Init)
মাইক এস

60

ম্যানুয়াল পৃষ্ঠা PS (1) বলেছেন :

চিহ্নিত প্রক্রিয়াগুলি হ'ল <defunct>মৃত প্রক্রিয়া (তথাকথিত "জম্বি" ) যেগুলি রয়ে গেছে কারণ তাদের পিতামাতারা তাদের সঠিকভাবে ধ্বংস করেন নি। init(8)পিতামাতার প্রক্রিয়াটি যদি প্রস্থান করে তবে এই প্রক্রিয়াগুলি ধ্বংস হয়ে যাবে ।

আপনি এটি মারতে পারবেন না কারণ এটি ইতিমধ্যে মারা গেছে। প্রক্রিয়া টেবিলের মধ্যে একটি প্রবেশ কেবল অবশিষ্ট জিনিস :

ইউনিক্স এবং ইউনিক্সের মতো কম্পিউটার অপারেটিং সিস্টেমগুলিতে, একটি জম্বি প্রক্রিয়া বা বিপর্যয়যুক্ত প্রক্রিয়া এমন একটি প্রক্রিয়া যা কার্যকরকরণ সম্পন্ন করেছে তবে প্রক্রিয়া সারণিতে এখনও একটি প্রবেশ রয়েছে has পিতামাতার প্রক্রিয়াটিকে তার সন্তানের প্রস্থান স্থিতি পড়তে দেওয়ার জন্য এই এন্ট্রিটি এখনও প্রয়োজন।

এ জাতীয় প্রক্রিয়াগুলির মধ্যে অনেকগুলি উপস্থিত না থাকলে এগুলি হতে দেওয়াতে কোনও ক্ষতি নেই। জম্বি শেষ পর্যন্ত তার পিতামাতার দ্বারা ডেকে আনা হয় (কল করে wait(2))। যদি মূল পিতামাতারা তার নিজস্ব প্রস্থানের আগে এটি পুনরায় কাটা না করেন তবে initপ্রক্রিয়া ( pid == 1) এটি পরবর্তী সময়ে এটি করে। বোকচন্দর প্রক্রিয়াটি কেবল:

এমন একটি প্রক্রিয়া যা শেষ হয়ে যায় এবং এটি মুছে ফেলা হয় যখন তার প্রস্থান স্থিতিটি অন্য প্রক্রিয়াতে জানানো হয়েছিল যা সেই প্রক্রিয়াটি শেষ হওয়ার অপেক্ষায় রয়েছে।


1

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

# egrep -v '^1$ = Make sure the process is not the init process.
# awk '{print $3}' = Print the parent process.

first_parent_of_first_dead_kid=$(ps -ef | grep [d]efunct | awk '{print $3}' | head -n1 | egrep -v '^1$')
echo "$first_parent_of_first_dead_kid"

# If the first parent of the first dead kid is in.telnetd, then kill it.
if ps -ef | grep $first_parent_of_first_dead_kid | grep in.telnetd;then
        echo "We have a defunct process whose parent process is in.telnetd" | logger -t KILL-DEFUNCT-TELNET
        echo "killing $first_parent_of_first_dead_kid" | logger -t KILL-DEFUNCT-TELNET
        kill $first_parent_of_first_dead_kid 2>&1 | logger -t KILL-DEFUNCT-TELNET
fi

1

প্যাডিংটন এর উত্তর প্রসারিত ..

আপনার আউটপুট থেকে আমরা একটি অবনমিত দেখতে পাচ্ছি , যার অর্থ এই শিশু প্রক্রিয়াটি হয় তার কাজটি সম্পূর্ণ করেছে অথবা দূষিত বা হত্যা করা হয়েছে। এর মূল প্রক্রিয়াটি এখনও চলছে এবং এটির মৃত সন্তানের নজরে নেই।

kill -9 PID কাজ করবে না (ইতিমধ্যে মারা গেছে)

এই শিশু প্রক্রিয়াটির পিতামাতার নির্ধারণ করতে, এই আদেশটি চালান:

ps -ef | grep defunct

 UID  PID **PPID** C STIME TTY TIME     CMD
 1000 637  27872   0 Oct12 ?   00:00:04 [chrome] <defunct>

পিতা বা মাতা কে দেখুন: ps ax | grep 27872

আপনি যদি চান তবে আপনি পিতামাতাকে হত্যা করতে পারেন, এবং অবসন্নতা চলে যাবে। kill -9 27872

আরও প্রযুক্তিগত যুক্তির জন্য জেএফ সেবাস্তিয়ানের উত্তর দেখুন।


1

@ প্যাডিংটনের উত্তরে যুক্ত করে, আমি তাড়াতাড়ি যাচাইয়ের জন্য আমার বাশার্কে এই ফাংশনটি যুক্ত করেছি:

defunct(){
    echo "Children:"
    ps -ef | head -n1
    ps -ef | grep defunct
    echo "------------------------------"
    echo "Parents:"
    ppids="$(ps -ef | grep defunct | awk '{ print $3 }')"
    echo "$ppids" | while read ppid; do
        ps -A | grep "$ppid"
    done
}

এটি এরকম কিছু তৈরি করে:

শিশু:
ইউআইডি পিআইডি পিপিআইডি সি স্টিম টাইট টাইম সিএমডি
ব্যবহারকারী 25707 25697 0 ফেব্রুয়ারি 26 পিটিএস / 0 00:00:00 [শ] 
ব্যবহারকারী 30381 29915 0 11:46 pts / 7 00:00:00 গ্রেপ বিচ্ছিন্ন
------------------------------
মাতাপিতা:
25697 পিটিএস / 0 00:00:00 এনএমপি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.