“হত্যা <পিআইডি>” সত্যিই প্রক্রিয়াটি হত্যা করছে না, কেন?


117

আমি আমার কমান্ড লাইন দক্ষতা উন্নত করার চেষ্টা করছি এবং আমি এমন একটি সমস্যার মুখোমুখি হয়েছি যেখানে আমি কোনও প্রক্রিয়া মারতে পারি না। আমি টাইপ করি kill 2200যেখানে 2200 আমার পিআইডি এবং প্রক্রিয়াটি মারা যায় না। কয়েক মিনিট পরে অপেক্ষা এখনও topএবং ps aux। এমনকি এটি সুডো দিয়ে টাইপ করার চেষ্টা করেছি - কোনও ফলাফল নেই।

কোনও ধারণা কেন এমন হবে?


সম্পাদনা

আমি একটি অদ্ভুত নির্ভরতা পেয়েছি, যেখানে fgপ্রক্রিয়া তালিকা আপডেট করে:

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2200 pts/0    00:00:00 top
 2202 pts/0    00:00:00 top
 2258 pts/0    00:00:00 ps
x@xxx:/etc/grub.d$ fg
top

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2200 pts/0    00:00:00 top
 2620 pts/0    00:00:00 ps
x@xxx:/etc/grub.d$ fg
top

x@xxx:/etc/grub.d$ ps
  PID TTY          TIME CMD
 1723 pts/0    00:00:00 bash
 2621 pts/0    00:00:00 ps

এটা কি প্রক্রিয়া ছিল? আপনি না পরীক্ষা যদি প্রক্রিয়া হয়তো ছিল কি বিলুপ্ত ? সেক্ষেত্রে আপনার পিতামাতার প্রক্রিয়াটি মারতে হবে।
htorque

প্রক্রিয়াটি top(সম্পাদনায় তালিকাভুক্ত)। আমি কেবল প্রোগ্রামটি পটভূমিতে কাজ করার চেষ্টা করে আবার এটি ফিরিয়ে আনতে চেয়েছিলাম।
প্যাট্রিক

2
Ctrl-z- র সঙ্গে একটি প্রক্রিয়া স্থগিত, এটা যতদিন সবচেয়ে সংকেত ব্লক করব যেমন স্থগিত হচ্ছে (অর্থাত যতক্ষণ না আপনি একটি fgবা bgপ্রক্রিয়ার জন্য)
টি

উত্তর:


178

প্রক্রিয়াগুলি কিছু সংকেত উপেক্ষা করতে পারে। আপনি সিগ্কিল প্রেরণ করলে এটি এড়ানো যাবে না (এবং এটি ক্লিনআপগুলি করতেও ধরবে না)। চেষ্টা করুন:

kill -9 {PID}

ম্যানুয়াল পৃষ্ঠাটি পড়ে আরও জানুন:

man kill

22
আরও লক্ষ করুন যে কিছু নির্দিষ্ট পরিস্থিতিতে , কোনও প্রক্রিয়াটি জম্বি / বিপর্যস্ত অবস্থায় থাকতে পারে যে এমনকি সিক্কিলও প্রক্রিয়াটিকে হত্যা করতে পারে না। সেক্ষেত্রে আপনাকে পিতামাতার প্রক্রিয়াটি খুঁজে বের করতে হবে এবং পিতামাতার প্রক্রিয়াটি মেরে ফেলতে হবে।
মিথ্যা রায়ান

15
যদি সেই প্রক্রিয়াটি লাইন থেকে সরে যায় তবে এটি ড্যাশ নাইনকে হত্যা করবে !
স্কটল

4
এবং কখনও কখনও কোনও পিতামাতার প্রক্রিয়া থাকে না, সেক্ষেত্রে আপনি কেবল খারাপ হয়ে গেছেন। এই জাতীয় প্রক্রিয়া অপসারণের একমাত্র উপায় হ'ল মেশিনটি রিবুট করা।
ব্যবহারকারী 606723

2
কিল কমান্ডের নামটি অনেকগুলি, অনেক ব্যবহারকারীর জন্য (শুরুতে আমাকে সহ) বিভ্রান্ত করে চলেছে। একটি অনুমান করে যে আপনি যখন "এক্স কিল" বলবেন এর অর্থ সত্যই এক্সকে মেরে ফেলুন এবং অন্য কিছু করবেন না। আমি বুঝতে পারি এটি কোনও জিনিস বদলাবে না তবে আমি আশা করি তারা আরও বিস্তৃত নামটি বেছে নিয়েছে ...
rbaleksandar

1
কি এমনকি পর kill -9কাজ করে না এবং প্রক্রিয়া এখনও প্রায় ঝুলন্ত হয়?
ডগলাস গ্যাসকেল

42

যদি killকোনও প্যারামিটার ছাড়াই আহ্বান করা হয় তবে এটি 15 ( SIGTERM) সংকেত পাঠায় । প্রক্রিয়া দ্বারা এই সংকেত উপেক্ষা করা যেতে পারে। এই সংকেতটি তার জিনিসগুলি পরিষ্কার করার প্রক্রিয়াটি সূচিত করে এবং তারপরে নিজেই সঠিকভাবে শেষ হয়। এটাই দুর্দান্ত উপায়।

আপনি 9 নম্বর সিগন্যালটি "প্রেরণ" করতেও SIGKILLপারেন যা প্রক্রিয়া দ্বারা উপেক্ষা করা যায় না। প্রক্রিয়া এমনকি এটি সনাক্ত করতে পারে না, কারণ কার্নেল প্রক্রিয়াটি শেষ করে, প্রক্রিয়া নিজেই নয়। এটাই খারাপ উপায়।

একজন বলেন kill -9 <pid>সর্বদা কাজ করে। এটা একটা কুফর । এমন পরিস্থিতি রয়েছে যেখানে এমনকি kill -9প্রক্রিয়াটিকে হত্যা করা হয় না। উদাহরণস্বরূপ যখন কোনও প্রক্রিয়াতে রাষ্ট্র থাকে D(নিরবচ্ছিন্ন ঘুম)। এই প্রক্রিয়াটিতে প্রতিটি সময়ই আই / ও-র জন্য অপেক্ষা করা থাকে (সাধারণত খুব দীর্ঘ হয় না)। সুতরাং, যদি কোনও প্রক্রিয়া I / O এর জন্য অপেক্ষা করে (উদাহরণস্বরূপ ত্রুটিযুক্ত হার্ডডিস্কে) এবং এটি সঠিকভাবে প্রোগ্রাম করা হয় না (একটি সময়সীমা সহ) তবে আপনি কেবল প্রক্রিয়াটি মারতে পারবেন না । কোন ব্যাপার আপনি কি করবেন. প্রক্রিয়াটি অব্যাহত থাকে আপনি কেবল ফাইলটিকে অ্যাক্সেসযোগ্য করার চেষ্টা করতে পারেন।


2
এটি অত্যন্ত সহায়ক, নেটওয়ার্ক ডিস্কগুলিতে আই / ও অ্যাক্সেস ঝুলানোর কারণে আমি বেশ কয়েকবার এটি অভিজ্ঞতা পেয়েছি এবং আমি ভাবছিলাম যে কেন আমি হিমায়িত প্রক্রিয়াগুলিকে হত্যা করতে পারি না। এই নির্দিষ্ট ইস্যুতে আরও কী কী ডকুমেন্টেশন রয়েছে এবং কীভাবে এটি পাওয়া যায়?
শেলজহান

7

এর নাম কিল হওয়া সত্ত্বেও প্রক্রিয়াগুলিকে হত্যা করে না, এটি এতে সংকেত প্রেরণ করে। ম্যান পৃষ্ঠা থেকে:

kill - send a signal to a process

পাঠানো ডিফল্ট সিগন্যাল kill [pid]হ'ল SIGTERM যা সাধারণত কিন্তু প্রয়োজনীয়ভাবে প্রক্রিয়াটি শেষ করতে বলে না। এমন একটি প্রোগ্রাম লেখা বেশ সম্ভব যা আপনি যখন এতে সিআইজিআরটিএম সিগন্যাল প্রেরণ করেন তবে এটি প্রস্তাবিত নয় a

আর একটি সাধারণ সিগন্যাল হ'ল SIGHUP যা প্রায়শই কোনও প্রোগ্রামকে তার কনফিগারেশন ফাইলগুলি পুনরায় পড়তে বলার জন্য ব্যবহৃত হয়।

আপনি যদি সত্যিই কোনও প্রোগ্রাম হত্যা করতে চান তবে আপনাকে سگ্কিল সিগন্যালটি ব্যবহারের প্রয়োজন kill -9 [pid]


2

দেখে মনে হচ্ছে আপনি কোনও প্রক্রিয়া স্থগিত করছেন (সম্ভবত টার্মিনালে Ctrl-Z টিপে)। এই অবস্থায়, আপনার প্রক্রিয়াটি হিমায়িত হওয়ায় একটি SIGTERM তে কোনও প্রতিক্রিয়া জানায় না। 'Fg' চালনা প্রক্রিয়াটি হ্রাস করে, তাই এটি সংকেতটি তুলতে এবং স্ব-সমাপ্ত করতে পারে। এটি ব্যাখ্যা করতে পারে যে কেন 'fg' প্রক্রিয়া তালিকা আপডেট করতে উপস্থিত হয়।


1
সুতরাং কিভাবে সংযুক্ত টার্মিনাল খুঁজে?
রুक्स

0

সি ++ এর মধ্যে থেকে, আমি সম্পাদন করেছি:

kill(4024, SIGKILL);

এবং একটি লিনাক্স (উবুন্টু) টার্মিনালে,

$ ps -ax | grep my_su

আউটপুটটি ছিল:

4024 pts/1    Z+     0:00 [my_subscriber] <defunct>

মনে হয়, এটি (4024) এখনও বেঁচে আছে। তবে উপরের "কিল" বিবৃতি হিসাবে অভিহিত প্রক্রিয়াটি সমাপ্ত হওয়ার সাথে সাথেই, 4024 আর উপস্থিত হয়নি। এখন আমি বিচার করেছি "অকার্যকর" প্রক্রিয়া প্রদর্শিত লাইন ছাড়া আর কিছুই নয় এবং এটিকে এড়িয়ে যাওয়ার সিদ্ধান্ত নিয়েছে। আমি আশা করি আমার অভিজ্ঞতা সেখানকার কাউকে সাহায্য করতে পারে। চিয়ার্স!


0

আপনি kill -lআপনার আর্কিটেকচার দ্বারা সমর্থিত সিগন্যালগুলি প্রদর্শন করতেও ব্যবহার করতে পারেন এবং সঠিকভাবে সংকেত প্রেরণের জন্য আপনি যে সিগন্যালটি ব্যবহার করতে চান তা সম্পর্কে আরও শিখতে পারেন।

দ্রষ্টব্য: অন্যরা যেমন উল্লেখ করতে পারে, এটি kill -9 {PID}কোনও জম্বি প্রক্রিয়া না হলে ব্যবহারের প্রস্তাব দেওয়া হয় না। কোনও প্রক্রিয়া একবার সিগিল পেয়ে গেলে তা পরিষ্কার বা অন্য কোনও সঠিক পদ্ধতি ছাড়াই তত্ক্ষণাত বন্ধ হয়ে যায়।


0

এটি আমি পোর্ট ৮০ তে চলমান লোকালহোস্টের পিল ব্যবহার করতাম (কৌণিক ক্লায়েন্ট দ্বারা) পোর্ট ৮০ এ চলমান অ্যাপের তথ্য পান

sudo lsof -i tcp:80

After That 
sudo kill -9 3348

3348চলমান প্রক্রিয়া যেখানে pid হয়

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