শেল সিগিল কি-বাইন্ডিং


18

আমি কীভাবে SIGKILLবর্তমান অগ্রভাগের কাজটিতে কী-বাইন্ডিং সেটআপ করতে পারি ? আমি ইতিমধ্যে জানি যে Ctrl+ + Cহয় SIGINTএবং Ctrl+ + \হয় SIGQUIT। আমি আরও কঠোর বিকল্প চাই would

এই সম্পর্কে গুরুতরভাবে অপ্রয়োজনীয় কিছু আছে?


এটি টার্মিনাল ড্রাইভার দ্বারা প্রেরণ করা হয়েছে, শেল দ্বারা নয় (যা আপনি প্রোগ্রামটি দিয়ে যা করছেন তা সম্পূর্ণ অজানা)।
user1686

আপনি নির্দিষ্ট শেলটি কোনটি উল্লেখ করেন নি zsh, এবং এটি কী-বাইন্ডিং সম্পর্কে প্রশ্নটি বলে। এটি zshএকটির টার্মিনাল স্থাপন সম্পর্কে নয়, লাইন সম্পাদককে কনফিগার করার বিষয়ে একটি প্রশ্ন ।
জেডিবিপি 26'11

উত্তর:


26

অগ্রহণযোগ্য বা না, এটি আসলে অসম্ভব:

কন্ট্রোল + [?] কী-বাইন্ডিংগুলি প্রকৃতপক্ষে tty ড্রাইভার দ্বারা পরিচালিত হয় শেল দ্বারা নয়, কারণ যতক্ষণ না অগ্রভাগে একটি প্রক্রিয়া চলছে, আপনার টার্মিনালের ইনপুট এবং আউটপুট সরাসরি প্রক্রিয়াতে ফরোয়ার্ড করা হবে। শেলটি কখনই আপনার কীপ্রেসগুলি (বা এমনকি দেখতে) তে অভিনয় করতে সক্ষম হবে না।

আপনি বর্তমানে নির্ধারিত Ctrl + [?] কী সমন্বয়গুলির একটি তালিকা পেতে পারেন stty -a; তবে কেবলমাত্র intr(সিগিন্ট, সাধারণত quitসিআরটিএল + সি এর সাথে আবদ্ধ) (SIGQUIT, সাধারণত Ctrl + to এর সাথে আবদ্ধ) এবং susp(SIGSUSP, সাধারণত Ctrl + Z এর সাথে আবদ্ধ থাকে) প্রকৃত ইউনিক্স সংকেতের সাথে মিলে যায়। ( kill,উদাহরণস্বরূপ, সিগ্কিল প্রেরণ করে না, তবে বর্তমান ইনপুটটি মুছে ফেলে))

দুর্ভাগ্যক্রমে, দুটি সিগন্যালের একটি প্রসেসের মাধ্যমে প্রেরণ করার কোনও উপায় নেই যা প্রক্রিয়া (সিগ্কিল এবং সিগস্টপ) দ্বারা অক্ষম করা যায় না, সুতরাং উল্লিখিত তিনটি সিগন্যালের যদি কোনও প্রভাব না থাকে, আপনাকে অন্য কোনও উপায়ে ব্যবহার করতে হবে ( অগ্রণী প্রক্রিয়াটি হ'ল উদাহরণস্বরূপ অন্য শেল)।

(প্রকৃতপক্ষে, তিনটি সংকেতের সমস্তটি ধরা ছাড়াও, অগ্রভাগ প্রক্রিয়া এমনকি টিটিটিকে "কাঁচা" মোডে স্থাপন করে প্রথম স্থানে বিশেষ কী সংমিশ্রণগুলি অক্ষম করতে পারে SS এসএসএইচ এটি করে, উদাহরণস্বরূপ - এটি কীভাবে এটি রিলে করতে পারে স্থানীয়ভাবে Ctrl + C রিমোট হোস্টের কাছে চাপা থাকে))


3

হ্যাঁ, অপ্রয়োজনীয় কিছু আছে। আপনি সরাসরি থেকে লম্ফ করছি SIGINTকরার SIGKILLসংকেত। আমি প্রস্তাব দিই, অন্য লোকেরা যেমন করে, পারমাণবিক বিকল্পটি নিয়োগের আগে SIGHUPবা SIGTERMসংকেতগুলি প্রেরণের দিকে তাকিয়ে থাকে । তারপরে এটি একটি কী বাঁধাই হিসাবে অবিচ্ছিন্নতা রয়েছে, যার অবশ্যই অর্থ এটি কেবল তখনই কাজ করবে যখন জেডএলই সক্রিয় থাকবে এবং শেলটি ইন্টারেক্টিভভাবে আপনাকে ইনপুট দেওয়ার জন্য অনুরোধ করবে, যখন কমান্ডগুলি চলবে না। (তার জন্য, আপনাকে শেল নয়, টার্মিনালটি কনফিগার করতে হবে এবং প্রেরণ কার্যকর করে এমন একটি টার্মিনাল লাইন শৃঙ্খলা থাকতে হবেSIGTERM একটি এক্সটেনশান হিসাবে প্রেরণকে POSIX নির্দিষ্ট আচরণের ))

এই নোটটিতে, অন্য কারও কাছে এখনও লক্ষ্য করা যায়নি যে আপনি শেললাইন সম্পাদক কী-বাইন্ডিং সম্পর্কে জিজ্ঞাসা করছেন, টার্মিনালটি নয়। আপনার প্রশ্নের প্রথম অংশের উত্তর দিতে, তারপরে:

"বর্তমান" কাজটিতে সংকেত প্রেরণের জন্য আপনি একটি শেল ফাংশন সেট আপ করেছেন।

function terminate-current-job() { kill -s TERM %+ ; }

তারপরে আপনি একটি জেডএলই ব্যবহারকারী-সংজ্ঞায়িত উইজেট তৈরি করেন যা এই শেল ফাংশনটিকে অনুরোধ করে।

zle -N terminate-current-job terminate-current-job

তারপরে, অবশেষে, আপনি সেই উইজেটটিকে আপনার পছন্দের একটি কীতে আবদ্ধ করুন।

bindkey "^/" terminate-current-job

1
আমি অনুমান করি যে তিনি আসলে লাইন সম্পাদক সম্পর্কে কথা বলছেন না - তিনি যদি শেলটিতে টাইপ করেন, তবে কোনও পূর্ববর্তী প্রক্রিয়া চলবে না, তাই না? যদি কোনও অগ্রভাগ প্রক্রিয়া চলমান থাকে এবং বর্তমান টিটির সাথে সংযুক্ত থাকে তবে শেলটি কখনই কী-টিপসগুলি দেখতে পাবে না।
lxgr
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.