আমি কীভাবে একটি সিএমএল অ্যাপ্লিকেশনটিতে সিআরটিএল + সি "ইন্টারসেপ্ট" করতে পারি?


85

আমি কীভাবে একটি সি এল এল (কমান্ড লাইন ইন্টারফেস) জাভা অ্যাপ্লিকেশনটিতে + (যা সাধারণত প্রক্রিয়াটি হারাতে পারি) বাধা দিতে পারি ?CtrlC

মাল্টি-প্ল্যাটফর্ম সমাধান কি উপস্থিত রয়েছে (লিনাক্স, সোলারিস, উইন্ডোজ)?

আমি ব্যবহার করছি Console's readLine(), কিন্তু যদি প্রয়োজন হয় তাহলে, আমি অন্য কিছু পদ্ধতি ব্যবহার করতে পারে স্ট্যান্ডার্ড ইনপুট থেকে অক্ষর পড়তে।

উত্তর:


121
Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run() { /*
       my shutdown code here
    */ }
 });

এটি সিগন্যালটিকে বাধা দিতে সক্ষম হওয়া উচিত, তবে কেবলমাত্র জেভিএম সম্পূর্ণরূপে নিজেকে শাটডাউন করার আগে একটি মধ্যবর্তী পদক্ষেপ হিসাবে, তাই আপনি যা দেখছেন তা তা নাও হতে পারে।

আপনার + ((ইউনিক্স এবং উইন্ডোজে) দ্বারা ট্রিগার হওয়া সংকেতটি বিরত রাখতে আপনার একটি SignalHandler( sun.misc.SignalHandler) ব্যবহার করা দরকার । এই নিবন্ধটি দেখুন (পিডিএফ, পৃষ্ঠা 8 এবং 9)।SIGINTCtrlC


4
@ মার্তিজন কোর্টেক্স এটি পাঁচ বছরের পরে ঘটে;) আমি সেই বিষয়ে একই জাতীয় উত্স পেয়েছি এবং সেই অনুযায়ী লিঙ্কটি পরিবর্তন করেছি।
ভনসি

@VonC - এটি ডেড আবার
Gurwinder সিং

@ গুরুভ কোন লিঙ্ক? সম্পাদন করা আমি এপ্রিল 2014 (তৈরি stackoverflow.com/revisions/... আপনি এখনও পিডিএফ ফাইল ডাউনলোড করতে পারেন ..:) এখনও বৈধ
VonC

16

আমি ধরে নিচ্ছি আপনি নিখুঁতভাবে শাটডাউন করতে চান, এবং শর্ট সার্কিট শাটডাউন প্রক্রিয়া করবেন না। যদি আমার ধারণাটি সঠিক হয়, তবে আপনার শাটডাউন হুকসের দিকে নজর দেওয়া উচিত ।


শটডাউন হুক এর আগে কখনও শুনিনি। ধন্যবাদ!
ivan_ivanovich_ivanoff

8

কোনও কারণে বন্ধ না করে Ctrl+ পরিচালনা করতে সক্ষম Cহওয়ার জন্য, আপনাকে সিগন্যাল হ্যান্ডলিংয়ের কিছু ফর্ম ব্যবহার করতে হবে (যেহেতু Ctrl+ Cইনপুট আসলে আপনার অ্যাপ্লিকেশনটিতে সরাসরি প্রেরণ করা হয় না, পরিবর্তে ওএস দ্বারা পরিচালিত হয় যা উত্পন্ন করে এর পরে জাভাতে পাস করা একটি সাইন ইন।

Http://www.oracle.com/technetwork/java/javase/signals-139944.html দেখুনসিগন্যাল হ্যান্ডলিং সংক্রান্ত বিশদ ।

(আপনি যদি কেবল নিখুঁতভাবে শাটডাউন করতে চান তবে আকফের উত্তর যথেষ্ট হবে))


4

কীভাবে সিআইসিএটারএম হ্যান্ডেল করবেন সে সম্পর্কে কিছু লিঙ্ক - এটি সিগন্যালটি হ'ল প্রোগ্রামটি ওএস সাইডে পাচ্ছে:

http://blog.webinf.info/2008/08/intercepting-sigterm.html

http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/signals.html

http://www.ibm.com/developerworks/java/library/i-signalhandling/

এটি পসিক্স অপারেটিং সিস্টেমে কাজ করা উচিত - যা ম্যাক এবং ইউনিক্স কাজ করা উচিত, উইন্ডোতে আমি নিশ্চিত নই, আমি শুনেছি এটি শুনতে পিসিক্সও কিছুটা সামঞ্জস্যপূর্ণ, তবে বিভিন্ন সংস্করণে এটি প্রচুর পরিমাণে ভার্টি হতে পারে।


4
দ্বিতীয় লিঙ্কটি ব্যর্থ হয়। এটি কি ওরাকল-এ পরিবর্তন করা হয়েছে oracle.com/technetwork/java/javase/tsg-vm-149989.pdf এ ?
সুযোগ

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