এগুলি প্যাকেট রিসিভার প্রক্রিয়ার স্বতন্ত্র থ্রেড। কোনও পৃথক থ্রেড মারার কোনও উপায় আছে কি? লিনাক্স কি কোনও নির্দিষ্ট কমান্ড সরবরাহ করে যা কোনও প্রক্রিয়াটির অধীনে কোনও নির্দিষ্ট থ্রেডে হত্যা বা স্টপ সিগন্যাল প্রেরণ করতে পারে?
এগুলি প্যাকেট রিসিভার প্রক্রিয়ার স্বতন্ত্র থ্রেড। কোনও পৃথক থ্রেড মারার কোনও উপায় আছে কি? লিনাক্স কি কোনও নির্দিষ্ট কমান্ড সরবরাহ করে যা কোনও প্রক্রিয়াটির অধীনে কোনও নির্দিষ্ট থ্রেডে হত্যা বা স্টপ সিগন্যাল প্রেরণ করতে পারে?
উত্তর:
বৃহত্তর প্রক্রিয়া থেকে স্বতন্ত্র থ্রেডকে হত্যা করা সাধারণত বেশ বিপজ্জনক। এই থ্রেড হতে পারে:
সাধারণভাবে, নিজেই অ্যাপ্লিকেশন দ্বারা পরিচালনা এবং সিঙ্ক্রোনাইজেশনের বাইরে, পৃথক থ্রেডকে হত্যা করা বোঝার মতো কিছু নয়।
আপনি tgkill (2) বা tkillআপনার সি প্রোগ্রামে ব্যবহার করতে পারেন (আপনাকে সিস্কেল (2) ব্যবহার করতে হবে ) তবে আপনি চান না । আপনার প্রোগ্রামের অভ্যন্তর থেকে আপনি pthread_kill (3) ব্যবহার করতে পারেন - যা খুব কমই কার্যকর।
(আমি ঠিক জানি না কীভাবে প্রভাব ফেলবে tgkillবা tkill- যেমন থ্রেডের সাথে SIGKILLবা SIGTERM-
Pthreads (7) গ্রন্থাগার ব্যবহারের নিম্নস্তরের কাপড় (কিছু সহ সংকেত (7) -s এবং futex (7) -s ইত্যাদি ...; দেখুন NPTL- র (7) ) এবং যদি আপনি কাঁচা-নিহত (সঙ্গে tkillবা tgkill) কিছু স্বতন্ত্র থ্রেড, আপনার প্রক্রিয়াটি কিছু ভুল অবস্থায় থাকবে (তাই অপরিবর্তিত আচরণ ) কারণ কিছু অভ্যন্তরীণ আক্রমণকারী ভেঙে যাবে।
সুতরাং আপনার প্যাকেট রিসিভার প্রোগ্রামের ডকুমেন্টেশন অধ্যয়ন করুন এবং অন্য কোনও উপায় সন্ধান করুন। যদি এটি বিনামূল্যে সফ্টওয়্যার হয় তবে এর উত্স কোডটি অধ্যয়ন করুন এবং এটি উন্নত করুন।
আরও সাবধানে সিগন্যাল (7) এবং সংকেত-সুরক্ষা (7) পড়ুন । সংকেতগুলি প্রক্রিয়াগুলিতে প্রেরণ ( কিল (2) দ্বারা ) এবং থ্রেডগুলিতে পরিচালনা করা বোঝানো হয় ।
এবং অনুশীলনে, সংকেত এবং থ্রেডগুলি ভাল বিবাহ করে না। কিছু pthread টিউটোরিয়াল পড়ুন ।
একটি সাধারণ কৌশল, যখন একটি বহু-থ্রেড প্রোগ্রাম কোডিং করা হয় (এবং যেমন বহিরাগত সংকেতগুলি হ্যান্ডেল করতে চায় SIGTERM) তা হ'ল আপনার নিজস্ব প্রক্রিয়াতে একটি পাইপ (7) ব্যবহার করা এবং পোল (2) অন্য কোনও থ্রেডের পাইপ (আপনি লিনাক্স বিবেচনাও করতে পারেন) নির্দিষ্ট signalfd (2) ), একটি সংকেত হাতি সঙ্গে লেখ (2) একটি বাইট বা যে নল মধ্যে তাদের কয়েক -ing। সেই সুপরিচিত কৌশলটি কিউটি ডকুমেন্টেশনে ভালভাবে ব্যাখ্যা করা হয়েছে (এবং আপনি এটি নিজের প্রোগ্রামে এমনকি Qt ছাড়াই ব্যবহার করতে পারেন)।
tgkillফাংশন একটি থ্রেড বিনষ্ট করার কোনো উপায় প্রদান করে। এটি একটি থ্রেডে একটি সংকেত প্রেরণ করে। এটিকে "হত্যা" নামকরণ করা হয়েছে কারণ এটি কোনও প্রক্রিয়াটি মেরে ফেলার historicalতিহাসিক উপায় এবং এটি কোনও থ্রেড মেরে ব্যবহার করা যায় না।
SIGKILLকোনও থ্রেডে প্রেরণ এটির ক্ষতি করছে। নাকি সর্বদা পুরো প্রক্রিয়াটিকে হত্যা করছে? আর কি SIGTERM? বিটিডাব্লু, এমনকি যদি কেবল একটি থ্রেডের ক্ষতি করা হয় তবে আমার বক্তব্যটি প্রক্রিয়াটি ভয়াবহ অবস্থায় রয়েছে।
SIGKILLএবং SIGTERMসংকেতগুলি প্রক্রিয়াটি হত্যা বা শেষ করতে সংজ্ঞায়িত করা হয়েছে। থ্রেড তাদের গ্রহণ করে তা নির্বিশেষে এটি সত্য - তারা এখনও একই জিনিসটি বোঝায়। কোনও প্রক্রিয়াটির ঘনিষ্ঠ সহযোগিতা ব্যতীত কোনও থ্রেডকে সমাপ্তি করানো একটি ক্র্যাক শট এবং প্রক্রিয়াটির জন্য সম্ভবত বিপর্যয়কর হবে।