আমার ধারণা আমি এই প্রশ্নে কিছুটা দেরি করেছি তবে যে কেউ একই সমস্যা রয়েছে তার জন্য আমি যাইহোক কিছু লিখব। আমি এই প্রশ্নের উত্তর হিসাবে এটি একই উত্তর ।
আমার সমস্যাটি হ'ল আমি চাইছিলাম আমার অ্যাপ্লিকেশনটি জিইউআই অ্যাপ্লিকেশন হোক তবে সম্পাদিত প্রক্রিয়াগুলি কোনও ইন্টারেক্টিভ কনসোল উইন্ডো সংযুক্ত না করে ব্যাকগ্রাউন্ডে চালানো উচিত। আমি মনে করি যখন পিতামাতার প্রক্রিয়াটি কনসোল প্রক্রিয়া হয় তখন এই সমাধানটিও কাজ করা উচিত। আপনাকে যদিও "CREATE_NO_WINDOW" পতাকাটি সরাতে হতে পারে।
আমি একটি মোড়কের অ্যাপ্লিকেশন সহ জেনারেটকনসোলসিআরটিএল () ব্যবহার করে এটি সমাধান করতে সক্ষম হয়েছি । জটিল অংশটি হ'ল ডকুমেন্টেশনটি কীভাবে এটি ব্যবহার করা যেতে পারে এবং এর সাথে কী কী সমস্যা রয়েছে সে সম্পর্কে প্রকৃতপক্ষে স্পষ্ট নয়।
আমার সমাধান এখানে বর্ণিত কিসের উপর ভিত্তি করে । তবে এটি কোনও ত্রুটি সহ সত্যই সমস্ত বিবরণ ব্যাখ্যা করে না, সুতরাং এটি কীভাবে কাজ করা যায় সে সম্পর্কে বিশদ এখানে।
একটি নতুন সহায়ক অ্যাপ্লিকেশন "হেল্পার। এক্স" তৈরি করুন। এই অ্যাপ্লিকেশনটি আপনার অ্যাপ্লিকেশন (পিতামাতা) এবং আপনি যে শিশু প্রক্রিয়াটি বন্ধ করতে সক্ষম হতে চান তার মধ্যে বসবে। এটি আসল শিশু প্রক্রিয়াও তৈরি করবে। আপনার অবশ্যই এই "মিডল ম্যান" প্রক্রিয়া বা জেনারেটকনসোলসিআরটিএলেন্ট () ব্যর্থ হবে।
অভিভাবক থেকে সহায়তাকারী প্রক্রিয়াটিতে যোগাযোগের জন্য কোনও ধরণের আইপিসি মেকানিজম ব্যবহার করুন যা সহায়কটির সন্তানের প্রক্রিয়াটি বন্ধ করা উচিত। সহায়ক যখন এই ইভেন্টটি পাবে তখন এটি "জেনারেটকনসোলসিআরটিএলেন্ট (সিটিআরএল_BREAK, 0)" কল করে যা নিজে এবং শিশু প্রক্রিয়াটি বন্ধ করে দেয়। আমি এটির জন্য নিজের জন্য একটি ইভেন্ট অবজেক্টটি ব্যবহার করেছি যা সন্তানের প্রক্রিয়া বাতিল করতে চাইলে পিতামাতার সম্পূর্ণ হয়।
আপনার হেল্পার তৈরি করতে। এক্সই CREATE_NO_WINDOW এবং CREATE_NEW_PROCESS_GROUP দিয়ে এটি তৈরি করুন। এবং শিশু প্রক্রিয়া তৈরি করার সময় এটিকে কোনও পতাকা (0) দিয়ে তৈরি করুন যার অর্থ এটি তার পিতামাতার কাছ থেকে কনসোলটি গ্রহণ করবে। এটি করতে ব্যর্থ হওয়ায় এটি ইভেন্টটিকে উপেক্ষা করবে।
প্রতিটি পদক্ষেপটি এইভাবে করা খুব জরুরি is আমি বিভিন্ন ধরণের সংমিশ্রণ চেষ্টা করে যাচ্ছি তবে এই সংমিশ্রণটি কেবলমাত্র কাজ করে। আপনি কোনও CTRL_C ইভেন্ট প্রেরণ করতে পারবেন না। এটি সাফল্য ফিরে আসবে তবে প্রক্রিয়া দ্বারা উপেক্ষা করা হবে। CTRL_BREAK একমাত্র কাজ করে। তারা উভয়ই শেষ পর্যন্ত এক্সিটপ্রসেস () কল করবে তাই আসলে কিছু যায় আসে না।
আপনি সরাসরি শিশু প্রক্রিয়া আইডির একটি প্রসেস গ্রুপড আইডি সহ জেনারেটকনসোলসিআরএলভেন্ট () কে কল করতে পারবেন না সরাসরি সাহায্যকারী প্রক্রিয়া চালিয়ে যাওয়ার অনুমতি দেয়। এটি পাশাপাশি ব্যর্থ হবে।
আমি এই কাজটি করার চেষ্টা করে পুরো দিন কাটিয়েছি। এই সমাধানটি আমার পক্ষে কাজ করে তবে যদি কারও কাছে যোগ করার মতো অন্য কিছু থাকে তবে দয়া করে করুন। আমি একই রকম সমস্যাযুক্ত অনেক লোককে খুঁজে পেয়ে নেট ঘুরে দেখলাম, তবে সমস্যার কোনও নির্দিষ্ট সমাধান নেই। জেনারেটকনসোলসিআরটিএলভেন্ট () কীভাবে কাজ করে তাও কিছুটা অদ্ভুত তাই কেউ যদি এ সম্পর্কে আরও বিশদ জেনে থাকে তবে দয়া করে শেয়ার করুন।
jstack
এই নির্দিষ্ট বিষয়টির পরিবর্তে নির্ভরযোগ্যতার সাথে ব্যবহার করা যেতে পারে: stackoverflow.com/a/47723393/603516