প্রক্রিয়া / প্রোগ্রাম জম্বি হয় কেন?


13

যদি কমান্ড লাইন থেকে স্ক্রিপ্টটি ঠিকঠাক চলতে থাকে, ক্রোন দিয়ে চলার পরে কেন একই স্ক্রিপ্টটি জম্বি রাজ্যে পরিণত হয় এবং আপনি কীভাবে একই সমস্যার সমাধান করবেন?

এখানে বাস্তব উদাহরণ অনুসরণ করা:

[root@abc ~]# ps ax | grep Z
23880 ?        Zs     0:00 [checkloadadv.sh] <defunct>
23926 pts/0    S+     0:00 grep Z
[root@abc ~]# strace -p 23880
attach: ptrace(PTRACE_ATTACH, ...): Operation not permitted
[root@abc ~]# pstree | grep  checkload
init-+-crond---crond-+-checkloadadv.sh
[root@abc ~]# bash /usr/bin/checkloadadv.sh
System Load is OK : 0.05

ঝামেলা হলে সমস্যার সমাধান হয়। জম্বিগুলি সমস্যা হয় না।
গিলস 'তাই খারাপ হওয়া বন্ধ করুন'

@ গিলস, আপনি ঠিক বলেছেন, তবে এগুলি প্রতিরোধ করার জন্য আমার কী যত্ন নেওয়া এবং খুঁজে পাওয়া দরকার? তুমি কি ভাব ?
রাহুল পাতিল

এগুলি কোনও সমস্যা নয়, তাই না, আপনার যত্নের প্রয়োজন নেই।
গিলস

উত্তর:


21

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

প্রকৃত জম্বির মতো একটি জম্বি প্রক্রিয়াও হত্যা করা যায় না, কারণ এটি ইতিমধ্যে মারা গেছে।

এটা কিভাবে হয়

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

অভিভাবক প্রক্রিয়াটির এখন wait()তার সন্তানের প্রক্রিয়া থেকে প্রস্থান স্থিতি এবং অন্যান্য তথ্য পড়তে সিস্কল চালানো দরকার । তারপরে বর্ণনাকারী স্মৃতি থেকে সরানো হয় এবং প্রক্রিয়াটি আর একটি জম্বি হয় না is

যদি wait()পিতামহীন প্রক্রিয়াটি কখনই সিস্কেলকে কল না করে তবে জম্বি প্রক্রিয়া বর্ণনাকারী স্মৃতিতে থাকে এবং মস্তিষ্ক খায়। সাধারণত আপনি জম্বি প্রক্রিয়াগুলি দেখতে পাচ্ছেন না, কারণ উপরের পদ্ধতিটিতে কম সময় লাগে।

মরার ভোর

প্রতিটি প্রক্রিয়া বর্ণনাকারীর খুব স্বল্প পরিমাণে মেমরির প্রয়োজন হয়, তাই কয়েকটি জম্বি খুব বিপজ্জনক নয় (বাস্তব জীবনের মতো)। একটি সমস্যা হ'ল প্রতিটি জম্বি প্রক্রিয়া তার প্রক্রিয়া আইডি রাখে এবং একটি লিনাক্স / ইউনিক্স অপারেটিং সিস্টেমে সীমিত সংখ্যক পিড থাকে। যদি কোনও অনুপযুক্ত প্রোগ্রামযুক্ত সফ্টওয়্যার প্রচুর পরিমাণে জম্বি প্রক্রিয়া উত্পন্ন করে তবে এমনটি ঘটতে পারে যে প্রক্রিয়াগুলি আর শুরু করা যায় না কারণ কোনও প্রসেস আইডি নেই।

সুতরাং, যদি তারা বিশাল গোষ্ঠীতে থাকে তবে তারা খুব বিপজ্জনক (যেমন অনেক সিনেমায় খুব ভাল প্রদর্শিত হয়)

আমরা কীভাবে জম্বিদের একটি দল থেকে নিজেকে রক্ষা করতে পারি?

মাথায় একটি গুলি কাজ করবে, তবে আমি তার জন্য কমান্ডটি জানি না (প্রক্রিয়া ইতিমধ্যে শেষ হয়ে গেছে বলে সিগ্কিল কাজ করবে না)।

ঠিক আছে, আপনি প্যারেন্ট প্রসেসে কিলের মাধ্যমে SIGCHLD প্রেরণ করতে পারেন, কিন্তু যখন এটি এই সিগন্যালটিকে উপেক্ষা করে তখন কি হবে? আপনার একমাত্র বিকল্প হ'ল পিতামাতার প্রক্রিয়াটি হ'ল আর init প্রক্রিয়াটি জম্বিটিকে "গ্রহণ" করে। ইনিশ wait()তার জম্বি বাচ্চাদের সাফ করার জন্য পর্যায়ক্রমে সিস্কেলকে কল করে ।

তোমার ক্ষেত্রে

আপনার ক্ষেত্রে, আপনাকে ক্রন্ড প্রক্রিয়াতে SIGCHLD প্রেরণ করতে হবে:

root@host:~# strace -p $(pgrep cron)
Process 1180 attached - interrupt to quit

তারপরে অন্য টার্মিনাল থেকে:

root@host:~$ kill -17 $(pgrep cron)

আউটপুটটি হ'ল:

restart_syscall(<... resuming interrupted call ...>) = ? ERESTART_RESTARTBLOCK (To be restarted)
--- SIGCHLD (Child exited) @ 0 (0) ---
wait4(-1, 0x7fff51be39dc, WNOHANG, NULL) = -1 ECHILD (No child processes) <-- Here it happens
rt_sigreturn(0xffffffffffffffff)        = -1 EINTR (Interrupted system call)
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=1892, ...}) = 0
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {0x403170, [CHLD], SA_RESTORER|SA_RESTART, 0x7fd6a7e9d4a0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({42, 0}, ^C <unfinished ...>
Process 1180 detached

আপনি wait4()সিস্কেলটি -১ ইসিএলডিডিটি দেখেন, যার অর্থ কোনও শিশু প্রক্রিয়া নেই। সুতরাং উপসংহারটি হ'ল: ক্রোন SIGCHLD সিস্টেমে প্রতিক্রিয়া জানায় এবং অ্যাপোক্যালিসটিকে জোর করা উচিত নয়।


1
কি, কোন ক্রিকেট ব্যাট এবং এলপি নেই?
অ্যালেক্সিয়স

-3

যদি পিতামাতার থ্রেডটি তার সন্তানের থ্রেডের আগে মারা যায় তবে সমস্ত শিশু থ্রেড জম্বি প্রক্রিয়াতে পরিণত হবে।


7
সত্য নয়, এগুলি কেবল পুনরায় প্রতিস্থাপন করা হবে। জুম্বো প্রক্রিয়াগুলিতে ওয়েটপিড কল ​​হয়নি।
ক্রিস ডাউন

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