কোনও প্রক্রিয়ায় কিল -9 প্রেরণে প্রক্রিয়াটির সহযোগিতা প্রয়োজন হয় না (যেমন একটি সংকেত পরিচালনা করার মতো), এটি কেবল এটি বন্ধ করে দেয়।
আপনি ধারণা করছেন যে কারণ কিছু সংকেত ধরা পড়তে পারে এবং এড়িয়ে যেতে পারে সেগুলি সকলেই সহযোগিতার সাথে জড়িত। তবে অনুসারে man 2 signal
, " সিগন্যালস সিগিল এবং সিগস্টপ ধরা যাবে না বা উপেক্ষা করা যাবে না"। সিগন্টারমে ধরা যেতে পারে, এ কারণেই প্লেইন kill
সর্বদা কার্যকর হয় না - সাধারণত এর অর্থ হ'ল প্রক্রিয়াটির হ্যান্ডলারের কিছু খারাপ হয়ে গেছে। 1
যদি কোনও প্রক্রিয়া কোনও প্রদত্ত সিগন্যালের জন্য কোনও হ্যান্ডলারকে সংজ্ঞায়িত করে (বা না পারে), কার্নেল একটি ডিফল্ট ক্রিয়া সম্পাদন করে। সিগনেটার এবং সিগকলের ক্ষেত্রে, এটি প্রক্রিয়াটি সমাপ্ত করা হয় (যদি না এর পিড 1 হয়; কার্নেলটি শেষ না করা হয় init
) 2 এর অর্থ ফাইলহ্যান্ডলগুলি বন্ধ থাকে, এটির স্মৃতি সিস্টেম পুলে ফিরে আসে, এর পিতামাতারা স্বতঃসিদ্ধ হন, তার অনাথ শিশু init ইত্যাদি দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত, ঠিক যেমন এটি কল করেছে exit
(দেখুন man 2 exit
)। প্রক্রিয়া আর বিদ্যমান নেই - যদি না এটি একটি জম্বি হিসাবে শেষ হয়, তবে সেক্ষেত্রে এটি এখনও কিছু তথ্য সহ কার্নেলের প্রক্রিয়া সারণীতে তালিকাভুক্ত রয়েছে; এটি ঘটে যখন তার পিতামাতারা না করেwait
এবং এই তথ্যটি সঠিকভাবে মোকাবেলা করুন। যাইহোক, জম্বি প্রক্রিয়াগুলিতে তাদের কাছে আর কোনও মেমরি বরাদ্দ থাকে না এবং তাই এটি চালানো চালিয়ে যেতে পারে না।
মেমোরিতে এমন কোনও গ্লোবাল টেবিলের মতো কিছু আছে যেখানে লিনাক্স কোনও প্রক্রিয়া দ্বারা গৃহীত সমস্ত সংস্থার রেফারেন্স রাখে এবং যখন আমি একটি প্রক্রিয়া "হত্যা" করি তখন লিনাক্স কেবল সেই টেবিলটি দিয়ে যায় এবং একের পর এক সংস্থানগুলি মুক্ত করে দেয়?
আমি মনে করি এটি যথেষ্ট সঠিক। দৈহিক মেমরি পৃষ্ঠা দ্বারা ট্র্যাক করা হয় (এক পৃষ্ঠায় সাধারণত 4 কেবি অংশের সমান) এবং এই পৃষ্ঠাগুলি থেকে নেওয়া হয় এবং একটি গ্লোবাল পুলে ফিরে আসে। এটিকে আরও জটিল করে দেওয়া হয়েছে যে কিছু ফ্রি'ড পৃষ্ঠাগুলি ক্যাশে হলে তাদের থাকা ডেটাগুলি আবার প্রয়োজন হয় (এটি এখনও বিদ্যমান ফাইল থেকে পড়া ডেটা)।
মানচিত্রগুলি "সংকেত" সম্পর্কে কথা বলে তবে অবশ্যই এটি একটি বিমূর্ততা।
অবশ্যই, সমস্ত সংকেত একটি বিমূর্ততা। এগুলি ধারণাগত, যেমন "প্রক্রিয়াগুলি"। আমি খানিকটা শব্দার্থক খেলছি, তবে যদি আপনি বোঝাচ্ছেন যে সিগিল হ'ল সিগমেন্টের চেয়ে গুণগতভাবে আলাদা, তবে হ্যাঁ এবং না। হ্যাঁ এই অর্থে যে এটি ধরা যায় না, তবে এই অর্থে যে তারা উভয়ই সংকেত। সাদৃশ্য অনুসারে, একটি আপেল কমলা নয় তবে আপেল এবং কমলা উভয়ই ফল বলে definition আপনি এটি ধরতে পারবেন না বলে সিক্কিল আরও বিমূর্ত বলে মনে হচ্ছে , তবে এটি এখনও একটি সংকেত। এখানে سگরটার হ্যান্ডলিংয়ের একটি উদাহরণ রয়েছে, আমি নিশ্চিত আপনি এগুলি আগে দেখেছেন:
#include <stdio.h>
#include <signal.h>
#include <unistd.h>
#include <string.h>
void sighandler (int signum, siginfo_t *info, void *context) {
fprintf (
stderr,
"Recieved %d from pid %u, uid %u.\n",
info->si_signo,
info->si_pid,
info->si_uid
);
}
int main (void) {
struct sigaction sa;
memset(&sa, 0, sizeof(sa));
sa.sa_sigaction = sighandler;
sa.sa_flags = SA_SIGINFO;
sigaction(SIGTERM, &sa, NULL);
while (1) sleep(10);
return 0;
}
এই প্রক্রিয়াটি কেবল চিরকাল ঘুমাবে। আপনি এটিকে একটি টার্মিনালে চালাতে পারেন এবং এটি দিয়ে سگরটার পাঠাতে পারেন kill
। এটি এ জাতীয় জিনিস ছড়িয়ে দেয়:
Recieved 15 from pid 25331, uid 1066.
1066 আমার uid হয়। পিডটি সেই শেলটি থেকে হবে যা থেকে kill
কার্যকর করা হয়, বা আপনি যদি কাঁটাচামচ করেন তবে পিড হত্যার পিড হবে kill 25309 & echo $?
)
আবার, সিকিলের জন্য কোনও হ্যান্ডলার সেট করার কোনও অর্থ নেই কারণ এটি কাজ করবে না। 3 আমি যদি kill -9 25309
প্রক্রিয়া শেষ হবে। তবে এটি এখনও একটি সংকেত; কার্নেলটিতে সিগন্যালটি কে প্রেরণ করেছে , এটি কী ধরণের সংকেত ইত্যাদি প্রকারের তথ্য রয়েছে etc.
1. আপনি যদি সম্ভাব্য সংকেতের তালিকার দিকে নজর না দিয়ে থাকেন তবে দেখুন kill -l
।
২. টিম পোস্ট নীচে যেমন উল্লেখ করেছেন, অন্য একটি ব্যতিক্রম নিরবচ্ছিন্ন ঘুমের প্রক্রিয়াগুলিতে প্রযোজ্য । অন্তর্নিহিত সমস্যাটি সমাধান না হওয়া পর্যন্ত এগুলি জাগানো যাবে না এবং এর ফলে সমস্ত সংকেত (সিগ্কিল সহ) পিরিয়ডের জন্য পিছিয়ে দেওয়া হয়েছে। কোনও প্রক্রিয়া উদ্দেশ্য অনুযায়ী পরিস্থিতি তৈরি করতে পারে না।
৩. এর অর্থ এই নয় যে ব্যবহার kill -9
করা অনুশীলনে আরও ভাল জিনিস। আমার উদাহরণ হ্যান্ডলারটি খারাপ দিক থেকে বোঝা যায় যে এটি না হয় exit()
। একটি সিগমেন্টার হ্যান্ডলারের আসল উদ্দেশ্য হ'ল প্রক্রিয়াটিকে অস্থায়ী ফাইলগুলি পরিষ্কার করার মতো কিছু করার সুযোগ দেওয়া, তারপরে স্বেচ্ছায় প্রস্থান করা। আপনি যদি ব্যবহার kill -9
করেন তবে এটি এই সুযোগটি পায় না, কেবল তাই করুন যদি "স্বেচ্ছায় প্রস্থান" অংশটি ব্যর্থ হয়েছে বলে মনে হয়।
kill -9
রেফারেন্স ।