উত্তর:
kill -9
( সিগ্কিল ) সর্বদা কাজ করে, তবে আপনার প্রক্রিয়াটি মেরে ফেলার অনুমতি থাকলে। মূলত হয় প্রক্রিয়াটি আপনার দ্বারা শুরু করা উচিত এবং সেটুয়েড বা সেটগিড হওয়া উচিত নয়, বা আপনাকে অবশ্যই মূল হতে হবে। একটি ব্যতিক্রম আছে: এমনকি রুট পিআইডি 1 ( init
প্রক্রিয়া) এ মারাত্মক সংকেত পাঠাতে পারে না ।
তবে অবিলম্বেkill -9
কাজ করার গ্যারান্টি নেই । সিগ্কিল সহ সমস্ত সিগন্যাল সংশ্লেষজনকভাবে বিতরণ করা হয়েছে: কার্নেল তাদের বিতরণ করতে সময় নিতে পারে। সাধারণত, সিগন্যাল সরবরাহ করতে বেশিরভাগ কয়েকটি মাইক্রোসেকেন্ড লাগে, সময় স্লাইস পেতে লক্ষ্যটির জন্য ঠিক সময় লাগে। যাইহোক, যদি লক্ষ্যটি সিগন্যালটিকে অবরুদ্ধ করে ফেলেছে , লক্ষ্যটি আনব্লক না করা অবধি সিগন্যালটি সারিবদ্ধ থাকবে।
সাধারণত, প্রক্রিয়াগুলি SIGKILL- কে ব্লক করতে পারে না। কার্নেল কোড করতে পারে এবং প্রসেসগুলি যখন তারা কল কল করে কার্নেল কোড কার্যকর করে । সিস্টেম কলটিতে বাধা দেওয়ার পরে কার্নেল কোডটি সমস্ত সংকেতকে অবরুদ্ধ করে কার্নেলের কোথাও কোথাও বা আরও সাধারণভাবে কার্নেলের আক্রমণকারীকে লঙ্ঘন করার কারণে খারাপভাবে গঠিত ডেটা কাঠামো তৈরি হতে পারে। সুতরাং যদি (কোনও ত্রুটি বা ভুল নকশার কারণে) কোনও সিস্টেম কল অনির্দিষ্টকালের জন্য ব্লক করে, কার্যকরভাবে প্রক্রিয়াটি মারার কোনও উপায় নেই be (তবে প্রক্রিয়াটি যদি কখনও সিস্টেম কলটি সম্পন্ন করে তবে হত্যা করা হবে ))
একটি সিস্টেম কল এ ব্লক করা একটি প্রক্রিয়া নিরবচ্ছিন্ন ঘুমে । ps
বা top
হবে কমান্ড (অধিকাংশ unices দিকে) রাষ্ট্র এটিকে দেখাতে D
(মূলত "জন্য ঘ isk", আমি মনে করি)।
দীর্ঘ বিরামহীন ঘুমের একটি শাস্ত্রীয় কেসটি যখন সার্ভার সাড়া দিচ্ছে না তখন এনএফএসের মাধ্যমে ফাইল অ্যাক্সেস করা প্রক্রিয়া হয়; আধুনিক প্রয়োগগুলি নিরবচ্ছিন্ন ঘুম চাপিয়ে দেয় না (যেমন লিনাক্সের অধীনে intr
মাউন্ট অপশনটি সিগন্যালটিকে এনএফএস ফাইল অ্যাক্সেসগুলিতে বাধা দিতে দেয়)।
আপনি কখনও কখনও হিসাবে চিহ্নিত এন্ট্রি দেখতে পারেন Z
(অথবা H
লিনাক্স অধীনে, আমি জানি না কি পার্থক্য হয়) ps
বা top
আউটপুট। এগুলি প্রযুক্তিগতভাবে প্রক্রিয়া নয়, এগুলি জম্বি প্রক্রিয়া, যা প্রক্রিয়া সারণিতে প্রবেশের চেয়ে বেশি কিছু নয়, আশেপাশে রাখা হয় যাতে পিতামাতার প্রক্রিয়াটি তার সন্তানের মৃত্যুর বিষয়ে অবহিত হতে পারে। যখন পিতামাতার প্রক্রিয়াটি মনোযোগ দেয় (বা মারা যায়) তখন তারা চলে যাবে ।
man 5 nfs
: " intr
/ nointr
মাউন্ট অপশনটি কার্নেল ২..2.২৫ এর পরে অবচিত করা হয়েছে। কেবলমাত্র সাইনকিআইএলই এই কার্নেলগুলিতে একটি মুলতুবি থাকা এনএফএস অপারেশনকে বাধাগ্রস্ত করতে পারে, এবং যদি নির্দিষ্ট করা হয় তবে পুরানো কার্নেলের সাথে সামনের সামঞ্জস্যতা প্রদান করতে এই মাউন্ট বিকল্পটিকে অগ্রাহ্য করা হবে।"
sshfs
প্রক্রিয়াটি (এবং একইভাবে অন্য কোনও FUSE ফাইল সিস্টেমের সাথে: আপনি সর্বদা এইভাবে জোর করে আন-মাউন্ট করতে পারেন) হত্যা করতে পারেন)।
কিছু সময় প্রক্রিয়া বিদ্যমান এবং এর কারণে হত্যা করা যায় না:
top
জেড ইঙ্গিত দেওয়া হয়েছেtop
এটা ডি দ্বারা signaled হয়মনে হচ্ছে আপনার কোনও জম্বি প্রক্রিয়া থাকতে পারে । এটি নিরীহ is যখন পিতামাতার প্রক্রিয়াটি মারা যায় বা তার সন্তানের মৃত্যুতে প্রতিক্রিয়া জানায় তখন তা চলে যাবে।
top
নীচের কমান্ডটি ব্যবহার করে প্রক্রিয়াটি একটি জম্বি কিনা তা আপনি দেখতে পারবেন :
ps aux | awk '$8=="Z" {print $2}'
ps
। কে নিশ্চিত হতে পারে যে প্রয়োজনীয় ক্ষেত্র সর্বদা 8 তম হবে, ps
সমস্ত ইউনিয়নে সমস্ত বাস্তবায়ন সহ?
কোনও ক্লু জন্য আপনার /var/log/kern.log
এবং /var/log/dmesg
(বা সমমান) পরীক্ষা করুন । আমার অভিজ্ঞতায় এটি তখনই ঘটেছিল যখন কোনও এনএফএস মাউন্টের নেটওয়ার্ক সংযোগ হঠাৎ করেই নেমে গেছে বা কোনও ডিভাইস ড্রাইভার ক্র্যাশ হয়ে গেছে। একটি হার্ড ড্রাইভ পাশাপাশি ক্র্যাশ যদি ঘটতে পারে, আমি বিশ্বাস করি।
lsof
প্রক্রিয়াটি কী কী ডিভাইসে খোলা হয়েছে তা দেখতে আপনি ব্যবহার করতে পারেন।
kill -9
60 মিনিট অপেক্ষা করার পরেও সাধারণত কাজ করা হয়নি। পুনরায় বুট করার একমাত্র সমাধান ছিল।
যদি @ ম্যাকিয়েজ এবং @ গিলসের উত্তরগুলি আপনার সমস্যার সমাধান না করে এবং আপনি প্রক্রিয়াটি স্বীকৃতি না পান (এবং এটি আপনার ডিস্ট্রোতে কী তা জিজ্ঞাসা করলে উত্তরগুলি সরে যায় না)। রুটকিট এবং অন্য কোনও চিহ্ন যা আপনার মালিকানাধীন ছিল তা পরীক্ষা করে দেখুন । একটি রুটকিট আপনাকে প্রক্রিয়াটি হত্যার হাত থেকে বাঁচাতে সক্ষম than বাস্তবে অনেকে আপনাকে এগুলি দেখতে বাধা দিতে সক্ষম। তবে যদি তারা 1 টি ছোট প্রোগ্রাম পরিবর্তন করতে ভুলে যায় তবে তাদের স্পট করা যেতে পারে (যেমন তারা সংশোধন করেছেন top
, তবে নয় htop
)। সম্ভবত এটি ক্ষেত্রে নয় তবে দুঃখিতের চেয়ে ভাল নিরাপদ।
খুন বলতে আসলে একটি সংকেত প্রেরণ করা হয়। আপনি প্রেরণ করতে পারেন একাধিক সংকেত আছে। কিল -9 একটি বিশেষ সংকেত।
সিগন্যাল প্রেরণের সময় অ্যাপ্লিকেশনটি এটির সাথে কাজ করে। যদি কার্নেল এটির সাথে কাজ করে না। যাতে আপনি আপনার অ্যাপ্লিকেশনটিতে একটি সিগন্যাল ফাঁদে ফেলতে পারেন।
তবে আমি বলেছিলাম কিল -9 বিশেষ ছিল। এটি বিশেষ যে অ্যাপ্লিকেশনটি এটি পায় না। এটি সরাসরি কার্নেলের কাছে যায় যা প্রথমে সম্ভাব্য সুযোগে অ্যাপ্লিকেশনটিকে সত্যই হত্যা করে। অন্য কথায় এটি মারা যায়
কিল -15 সিগন্যাল সিগমেন্টার প্রেরণ করে যা অন্য কথায় সিগন্যাল টার্মিনেটের জন্য দাঁড়িয়েছে অ্যাপ্লিকেশনটিকে প্রস্থান করতে বলে। কোনও অ্যাপ্লিকেশনকে বলার বন্ধুত্বপূর্ণ উপায় এটি বন্ধ হওয়ার সময়। তবে অ্যাপ্লিকেশনটি কিল -9 সাড়া না দিলে এটি হত্যা করবে kill
কিল -9 যদি কাজ না করে তবে এর অর্থ সম্ভবত আপনার কার্নেলটি খারাপ হয়ে গেছে। একটি রিবুট ক্রম হয়। আমি যে কখনও ঘটছে তা মনে করতে পারি না।
প্রথমে এটি পরীক্ষা করে দেখুন এটির একটি জুম্বো প্রক্রিয়া (যা খুব সম্ভব):
ps -Al
আপনি এরকম কিছু দেখতে পাবেন:
0 Z 1000 24589 1 0 80 0 - 0 exit ? 00:00:00 soffice.bin <defunct>
(বামদিকে "জেড" নোট করুন)
যদি 5 ম কলামটি 1 নয়, তবে এর অর্থ এটির একটি প্যারেন্ট প্রক্রিয়া রয়েছে। সেই প্যারেন্ট প্রসেস আইডি হত্যার চেষ্টা করুন ।
যদি এর পিপিআইডি = 1, এটি হত্যা করবেন না !! ভাবুন, অন্যান্য ডিভাইস বা প্রক্রিয়া এর সাথে সম্পর্কিত হতে পারে।
উদাহরণস্বরূপ, আপনি যদি একটি মাউন্ট করা ডিভাইস বা সাম্বা ব্যবহার করছিলেন তবে এটি আনমাউন্ট করার চেষ্টা করুন। এটি জুম্বো প্রক্রিয়াটি মুক্তি দিতে পারে।
দ্রষ্টব্য : যদি ps -Al
(বা top
) "জেড" এর পরিবর্তে "ডি" দেখায়, এটি দূরবর্তী মাউন্ট (এনএফএসের মতো) এর সাথে সম্পর্কিত হতে পারে। আমার অভিজ্ঞতায়, রিবুট করা সেখানে যাওয়ার একমাত্র উপায়, তবে আপনি আরও উত্তরগুলি পরীক্ষা করতে পারেন যা এই কেসটিকে আরও বিস্তারিতভাবে কভার করে।
অন্যরা যেমন উল্লেখ করেছে, নিরবচ্ছিন্ন ঘুমের মধ্যে একটি প্রক্রিয়া তাত্ক্ষণিকভাবে হত্যা করা যায় না (বা, কিছু ক্ষেত্রে, মোটেও)। এটি লক্ষ্য করার মতো বিষয় যে নির্দিষ্ট পরিস্থিতিতে, বিশেষত সাধারণ ক্ষেত্রে যেখানে এনএফএসে অপেক্ষা করা হচ্ছে সেখানে এই সমস্যা সমাধানের জন্য আরেকটি প্রক্রিয়া রাষ্ট্র, TASK_KILLABLE যুক্ত করা হয়েছিল। দেখুন http://lwn.net/Articles/288056/
দুর্ভাগ্যক্রমে আমি বিশ্বাস করি না যে এটি কার্নেলের বাইরে কোথাও ব্যবহৃত হয় তবে এনএফএস।
ls
একটি sshfs
মাউন্ট অ্যাক্সেস করার প্রক্রিয়াটি হারাতে আমার সমস্যা হয়েছিল , যখন রিমোট সার্ভারটি অপ্রয়োজনীয় হতে পারে। FUSE বা sshfs এর জন্য কি কোনও সমাধান রয়েছে যা আমি ভবিষ্যতে এই জাতীয় পরিস্থিতি এড়াতে ব্যবহার করতে পারি? 2.6.30 কার্নেল
একটি ছোট স্ক্রিপ্ট তৈরি করেছে যা আমাকে একবার দেখার জন্য অনেকটা সহায়তা করেছিল!
আপনি এটির পথে কোনও প্রদত্ত নামের সাথে যে কোনও প্রক্রিয়া হত্যার জন্য এটি ব্যবহার করতে পারেন (এতে মনোযোগ দিন !!) অথবা আপনি "-u ব্যবহারকারীর নাম" পরামিতি ব্যবহার করে প্রদত্ত ব্যবহারকারীর যে কোনও প্রক্রিয়া মেরে ফেলতে পারেন।
#!/bin/bash
if [ "$1" == "-u" ] ; then\n
PID=`grep "$2" /etc/passwd | cut -d ":" -f3`
processes=`ps aux | grep "$PID" | egrep -v "PID|ps \-au|killbyname|grep" | awk '{ print $2}'`
echo "############# Killing all processes of user: $2 ############################"
else
echo "############# Killing processes by name: $1 ############################"
processes=`ps aux | grep "$1" | egrep -v "killbyname|grep" | awk '{ print $2}' `
fi
for process in $processes ; do
# "command" stores the entire commandline of the process that will be killed
#it may be useful to show it but in some cases it is counter-productive
#command=`ps aux | grep $process | egrep -v "grep" | awk '{ print $2 }'`
echo "Killing process: $process"
echo ""
kill -9 $process
done
এমন একটি মামলা রয়েছে যেখানে আপনি কোনও প্রক্রিয়াতে একটি কিল -9 প্রেরণ করলেও, সেই পিডটি বন্ধ হয়ে যাবে, তবে প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে (উদাহরণস্বরূপ, আপনি যদি এটির চেষ্টা করে থাকেন তবে gnome-panel
এটি পুনরায় আরম্ভ হবে): এখানে কি এমন ঘটনা ঘটতে পারে?
মূলত এখান থেকে :
স্ট্রেস কিছু দেখায় কিনা তা পরীক্ষা করে দেখুন
strace -p <PID>
প্রক্রিয়াটি জিডিবির সাথে সংযুক্ত করার চেষ্টা করুন
gdb <path to binary> <PID>
যদি প্রক্রিয়াটি এমন কোনও ডিভাইসের সাথে ইন্টারঅ্যাক্ট করে যা আপনি আনমাউন্ট করতে পারেন, কার্নেল মডিউলটি অপসারণ করতে পারেন, বা শারীরিকভাবে সংযোগ বিচ্ছিন্ন / আনপ্লাগ করুন ... তারপরে চেষ্টা করুন।
আমার এই সমস্যাটি ছিল এই যে আমি সঙ্গে চালু ছিল একটি প্রোগ্রাম ছিল strace
এবং বিঘ্নিত Ctrl
+ + C
। এটি একটি T
(সনাক্ত বা বন্ধ) অবস্থায় শেষ হয়েছিল। আমি জানি না কীভাবে এটি ঘটেছিল তবে এটি কৃপাযোগ্য ছিল না SIGKILL
।
দীর্ঘ গল্প সংক্ষেপে, আমি এটি সহ এটি হত্যা করতে সফল হয়েছিল gdb
:
gdb -p <PID>
> kill
Kill the program being debugged? (y or n) y
> quit
গিলসের উত্তরের একটি সূত্রের ভিত্তিতে, আমার উপরে "জেড" চিহ্নিত একটি প্রক্রিয়া ছিল ( <defunct>
পিএসে) যা সিস্টেম সংস্থান ব্যবহার করছে, এমনকি এটির একটি বন্দর খোলা ছিল যা LISTEN'ing ছিল এবং আপনি সেই বন্দরের সাথে সংযোগ স্থাপন করতে পারেন। এটি এটি কার্যকর করার পরে ছিল kill -9
। এর পিতামাতার "1" (অর্থাত্ init
) সুতরাং তাত্ত্বিকভাবে এটি কেবল পুনরাবৃত্তি করা এবং অদৃশ্য হওয়া উচিত। তবে এটি ছিল না, এটি চারপাশে লেগে ছিল, যদিও দৌড়াচ্ছে না, এবং "মরছে না"
সুতরাং আমার ক্ষেত্রে এটি জম্বি ছিল তবে এখনও সম্পদ গ্রহণ করছে ... FWIW।
এবং এটা কোন সংখ্যা দ্বারা killable ছিল না kill -9
'এর
এবং এর পিতামাতা ছিল init
কিন্তু এটি কাটা হয়নি (পরিষ্কার করা)। অর্থাৎ init
একটি জম্বি সন্তান ছিল had
এবং সমস্যা সমাধানের জন্য পুনরায় বুট করার প্রয়োজন ছিল না। যদিও একটি রিবুট সমস্যাটির আশেপাশে "কাজ করবে" / এটিকে দ্রুত বন্ধ করে দিয়েছে। শুধু করুণাময় নয়, যা এখনও সম্ভব ছিল।
এবং এটি একটি জম্বি প্রক্রিয়াধীন মালিকানাধীন একটি তালিকা বন্দর ছিল (এবং কয়েকটি অন্যান্য বন্দরও যেমন CLOSE_WAIT স্ট্যাটাসটি লোকালহোস্টের সাথে লোকালহোস্টের সাথে সংযুক্ত)। এবং এটি এখনও সংযোগ গ্রহণ করেছে। এমনকি একটি জম্বি হিসাবে। আমি অনুমান করি যে বন্দরগুলি পরিষ্কার করার জন্য এটি এখনও চারপাশ পায় নি তাই এখনও আগত সংযোগগুলি টিসিপি শ্রবণকারী বন্দরের ব্যাকলগে যুক্ত হয়েছিল, যদিও তাদের গ্রহণযোগ্য হওয়ার কোনও সুযোগ ছিল না।
উপরের অনেকগুলি ইন্টারভিউগুলিতে বিভিন্ন জায়গায় "অসম্ভব" হিসাবে বর্ণনা করা হয়েছে।
দেখা যাচ্ছে যে এর মধ্যে আমার একটি অভ্যন্তরীণ থ্রেড ছিল যা "সিস্টেম কল" (এই উদাহরণে ioctl) চালাচ্ছিল যা ফিরে আসতে কয়েক ঘন্টা সময় নিচ্ছিল (এটি প্রত্যাশিত আচরণ ছিল)। দৃশ্যত ioctl
কলটি থেকে ফিরে না আসা পর্যন্ত সিস্টেম "সমস্ত উপায়ে" প্রক্রিয়াটিকে হত্যা করতে পারে না , অনুমান করুন এটি কার্নেল জমিতে প্রবেশ করবে না। কয়েক ঘন্টা পরে এটি ফিরে আসল, জিনিসগুলি পরিষ্কার হয়ে গেল এবং সকেটগুলি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে গেছে ইত্যাদি প্রত্যাশা অনুযায়ী। মৃত্যুর সারিতে কিছুটা অবসন্ন সময়! কার্নেল ধৈর্য ধরে এটি হত্যা করার জন্য অপেক্ষা করছিল।
সুতরাং ওপিকে উত্তর দিতে, কখনও কখনও আপনাকে অপেক্ষা করতে হবে। অনেক দিন. তারপরে হত্যার অবশেষে গ্রহণ করা হবে।
কার্নেল প্যানিক (যেমন কার্নেল বাগ) আছে কিনা তা পরীক্ষা করার জন্য ডেমসগ পরীক্ষা করে দেখুন।