কে অ্যাপ্লিকেশন কীবোর্ড থেকে সংকেত প্রাপ্ত সিদ্ধান্ত নেয়?


16

টার্মিনালে কীবোর্ড থেকে সিগন্যাল সম্পর্কে আমার বর্তমান উপলব্ধি (মূলত আমার পর্যবেক্ষণগুলিকে গুগলে কী পাওয়া যায় তার উপর ম্যাপ করার চেষ্টা করার ভিত্তিতে) নিম্নলিখিত:

  • ব্যবহারকারীদের সিসি
  • এটি টার্মিনালের ইনপুট বাফারে একটি বাইট হিসাবে প্রেরণ করা হয় যা সিটির 7 বিট আসকি মান থেকে 2 বামদিকের বিট সাফ করে গণনা করা হয়

এর পরে এটি সত্যিই কুয়াশাচ্ছন্ন হতে শুরু করে, কারণ কনফিগারেশনটি কী ইনপুট মানে টার্মিনালে কী সংকেত হয় (স্টটি)। আমি মনে করি এর অর্থ এই যে টার্মিনাল নিজেই প্রক্রিয়াতে সংকেত প্রেরণ করছে। তবে আমি যদিও এটি টার্মিনাল এটি পড়ছে যে অ্যাপ্লিকেশন সম্পর্কে জানেন না।

টার্মিনালটিতে কী-বোর্ড দ্বারা সিগন্যাল প্রেরণ কীভাবে শেষ থেকে শেষ পর্যন্ত কাজ করে?


1
তার নিজের উপর না কোন উত্তর কিন্তু মূল্য পাঠ: পির TTY demystified , লে দ্বারা।
ডাস্কউফ -অ্যাক্টিভ-

উত্তর:


33

টিপে Cথাকা অবস্থায় টিপলে Ctrlকী-প্লেস পাঠানো হয়, তারপরে কীরেলেজ এক্স 11 ইভেন্টটি টার্মিনাল এমুলেটরে প্রেরণ করে।

এই ইভেন্টটির পরে (সাধারণত কীপ্রেস এক), টার্মিনাল এমুলেটরটি ^Cসিউডো-টিটি ডিভাইসটির মাস্টার দিকে তার ফাইল বিবরণীতে 0x3 বাইট ( ) লিখেছেন writes

যদি isigডিভাইসের টার্মিওস সেটিংটি চালু থাকে এবং intrসেটিংটি যদি 0x3 বাইটে সেট করা থাকে, তবে কার্নেলটি টার্মিনাল ডিভাইসের অগ্রভাগ প্রক্রিয়া গোষ্ঠীর সমস্ত সদস্যকে পিআইএনটি সিগন্যাল প্রেরণ করে (পিটিআই ডিভাইসে সঞ্চিত অন্য একটি বৈশিষ্ট্য)। সেক্ষেত্রে পিটিটির স্লেভ সাইডে পড়ার জন্য 0x3 বাইট পাওয়া যাবে না।

এটি সাধারণত ইন্টারেক্টিভ শেল যা setpgid()শেল কাজের জন্য প্রক্রিয়া গ্রুপ (সহ ) তৈরি করে এবং কোনটি অগ্রভাগে tcsetpgrp()স্থাপন করা উচিত ( পিটিআই ডিভাইসের সেই বৈশিষ্ট্যটি সেট করে) বা না তা স্থির করে।

উদাহরণস্বরূপ আপনি যখন একটি ইন্টারেক্টিভ শেলের প্রম্পটে চালাবেন:

foo | bar

শেলটি দুটি প্রসেসের সাথে একটি নতুন প্রক্রিয়া গোষ্ঠী শুরু করে (যার মধ্যে এটি কার্যকর হয় fooএবং barতার স্টিডিনকে / পাইপের সাথে সংযুক্ত করার পরে) এবং সেই গোষ্ঠীকে অগ্রভাগে রাখে। আপনি Ctrl-C টিপলে উভয় প্রক্রিয়াই SIGINT পাবেন।

ভিতরে:

foo | bar &

একই তবে প্রক্রিয়া গোষ্ঠীটি অগ্রভাগে স্থাপন করা হয় না (এবং শেল এছাড়াও এটির জন্য অপেক্ষা করে না যাতে আপনি অন্যান্য আদেশগুলি প্রবেশ করতে পারেন)। এই প্রক্রিয়াগুলি সিআরটিএল-সি-তে স্বাক্ষর পাবে না তবে তারা যদি টিটি ডিভাইস থেকে পড়ার চেষ্টা করে তবে তা স্থগিত করা যেতে পারে।

আরও পড়ুন এখানে: প্রতিটি সিউডো-টার্মিনাল (পিটিওয়াই) উপাদান (সফ্টওয়্যার, মাস্টার সাইড, স্লেভ সাইড) এর দায়িত্বগুলি কী?


2
সমৃদ্ধ উত্তরের জন্য ধন্যবাদ। আমি বুঝতে পেরেছি কিনা তা নিশ্চিত করার জন্য আমি উত্তরটির মূলটি পুনরায় লিখতে চেষ্টা করব: কার্নেল দ্বারা সিগন্যাল প্রেরণ করা হয়েছে, যিনি ডিভাইসের বৈশিষ্ট্যগুলিতে কনফিগার করা ইনপুটটির জন্য টিটি ডিভাইসটি নিজেই পর্যবেক্ষণ করছেন (যারাই এটি কনফিগার করতে চায়) এবং কার্নেল এটিকে প্রক্রিয়াকরণ গোষ্ঠীতে প্রেরণ করে যা ডিভাইস বৈশিষ্ট্যগুলিতে কনফিগার করা হয় (প্রধানত একটি সেশন নেতার দায়িত্ব হিসাবে শেল দ্বারা)। আমি আশা করি এটি সঠিক।
calaeda.info

1
@ calavera.info, হ্যাঁ এটি সঠিক। সিরিয়াল কেবলের শেষে একটি আসল টার্মিনালের ক্ষেত্রে, কার্নেলটি তার থেকে আসা 0x3 বাইটটি সন্ধান করছে। সিউডো-টার্মিনালের জন্য, মাস্টার সাইডটি তারটি প্রতিস্থাপন করে। এবং কার্নেলটি 0x3 বাইটটি টার্মিনাল এমুলেটর দ্বারা প্রেরিত বাইটগুলিতে সন্ধান করছে। আরও দেখুন আরো বিস্তারিত জানার সাথে অন্য Q & A- একটি লিঙ্ক (আসলে যে কার্নেল প্রক্রিয়াকরণ যা যখন ডিভাইসটি একটি "টার্মিনাল" ডিভাইস (টার্মিনাল হিসেবে ব্যবহার করা হয় সম্পন্ন করা হয় একটি মডুলার নকশা অংশ মতো সম্পাদন করা লাইন শৃঙ্খলা )।
Stéphane Chazelas

প্রশ্নটি টার্মিনাল বলেছিল না , টার্মিনাল এমুলেটরের চেয়ে ? আমি অনুমান করি না যে এটি খুব বেশি পার্থক্য নিয়েছে, এমুলেটরটির কাজটি যতটা সম্ভব একটি টার্মিনালের মতো কাজ করা ...
টবি স্পাইট

2
@ টবি, হ্যাঁ, যেহেতু আজকাল খুব কমই কেউ সত্যিকারের টার্মিনাল ব্যবহার করে, আমি ধরে নিয়েছিলাম ওপি বলতে টার্মিনাল এমুলেটর (তাদের অনেককে "টার্মিনাল" বলা হয়)। আরও তথ্যের জন্য আমার এবং লিঙ্কিত প্রশ্নোত্তরের উপরে আমার মন্তব্যও দেখুন।
স্টাফেন চেজেলাস

1
@ টবিস্পাইট হ্যাঁ, আমি একটি টার্মিনাল সম্পর্কে জিজ্ঞাসা করছিলাম কারণ আমি সিরিয়াল লাইনের মাধ্যমে প্রকৃত টার্মিনালটি নিয়ে কাজ করছি তবে উত্তর এবং নিম্নলিখিত মন্তব্যগুলি উভয় ক্ষেত্রেই সম্পূর্ণ বৈধ ছিল।
calavera.info
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.