পসিক্স স্পেক যেখানে সত্যিকারের কন্ট্রোলিং টার্মিনাল সম্পর্কিত তার বেটগুলি হেজ করে এবং যা এটি এভাবে সংজ্ঞায়িত করে:
- কন্ট্রোলিং টার্মিনাল
- টার্মিনালটি উল্লেখ করে বেশ কয়েকটি বিশেষ ফাইলগুলির মধ্যে কোনটি বোঝানো হয়েছে তার প্রশ্নটি POSIX.1 এ সমাধান করা হয়নি। পথের নামটি
/dev/tty
একটি প্রক্রিয়া সম্পর্কিত কন্ট্রোলিং টার্মিনালের প্রতিশব্দ।
এটি সংজ্ঞা তালিকার মধ্যে রয়েছে - এবং এটি সেখানে রয়েছে। তবে জেনারেল টার্মিনাল ইন্টারফেসে আরও কিছু বলা হয়:
একটি টার্মিনাল এটির নিয়ন্ত্রণকারী টার্মিনাল হিসাবে কোনও প্রক্রিয়ার সাথে সম্পর্কিত হতে পারে। একটি নিয়ন্ত্রণকারী টার্মিনাল থাকা একটি সেশনের প্রতিটি প্রক্রিয়াতে একই নিয়ন্ত্রণকারী টার্মিনাল থাকে। একটি টার্মিনাল সর্বাধিক এক সেশনের জন্য নিয়ন্ত্রণকারী টার্মিনাল হতে পারে। একটি অধিবেশন জন্য নিয়ামক টার্মিনাল একটি বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে অধিবেশন নেতা দ্বারা বরাদ্দ করা হয়। যদি সেশন নেতার কোনও নিয়ন্ত্রণকারী টার্মিনাল না থাকে এবং O_NOCTTY বিকল্পটি ব্যবহার না করে সেশনের সাথে ইতিমধ্যে জড়িত না এমন একটি টার্মিনাল ডিভাইস ফাইল খোলে (খোলা (দেখুন)), এটি টার্মিনালটি সেশনের নিয়ন্ত্রণকারী টার্মিনাল হয়ে যায় কিনা তা প্রয়োগ-সংজ্ঞায়িত করা হয় নেতা।
কন্ট্রোলিং টার্মিনালটি কাঁটাচামচ () ফাংশন কলের সময় একটি শিশু প্রক্রিয়া দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত হয়। যখন এটির সাথে একটি নতুন অধিবেশন তৈরি হয় তখন একটি প্রক্রিয়া তার নিয়ন্ত্রণকারী টার্মিনালটিকে ত্যাগ করেsetsid()
ফাংশন; পুরানো সেশনে থাকা অন্যান্য প্রক্রিয়াগুলিতে এই টার্মিনালটি ছিল যেমন তাদের নিয়ন্ত্রণকারী টার্মিনালটি এটি চালিয়ে যেতে থাকে। নিয়ন্ত্রণকারী টার্মিনালের সাথে যুক্ত সিস্টেমের সর্বশেষ ফাইল বর্ণনাকারী (বর্তমান সেশনে থাকুক বা না থাকুক) সমাপ্ত হওয়ার পরে, এটি নিয়ন্ত্রণহীন টার্মিনাল হিসাবে যে টার্মিনালটির যে সমস্ত প্রক্রিয়া ছিল তার কোনও নিয়ন্ত্রণকারী টার্মিনাল বন্ধ ছিল কিনা তা অনির্ধারিত। এই ফ্যাশনে নিয়ন্ত্রণকারী টার্মিনালটি ত্যাগ করার পরে কোনও সেশন নেতা কোনও নিয়ন্ত্রণকারী টার্মিনালটির পুনঃনির্ধারণ করতে পারে কিনা তা অনির্দিষ্ট। কোনও প্রক্রিয়া নিয়ন্ত্রণকারী টার্মিনালের সাথে যুক্ত সমস্ত ফাইল বিবরণকারীকে বন্ধ করে কেবল তার নিয়ন্ত্রণকারী টার্মিনালটিকে ছেড়ে দেয় না, যদি অন্যান্য প্রক্রিয়াগুলি এটি চালিয়ে যেতে থাকে।
অনির্ধারিত অনেক কিছুই রয়েছে - এবং সত্যই আমি মনে করি এটি বোধগম্য। টার্মিনালটি একটি মূল ইউজার ইন্টারফেস, যদিও এটি কিছু ক্ষেত্রে অন্যান্য ধরণের জিনিস যেমন প্রকৃত হার্ডওয়্যার বা এমনকি একধরণের প্রিন্টার - তবে অনেক ক্ষেত্রে এটি ব্যবহারিকভাবে কিছুই নয় - যেমন xterm
একটি এমুলেটর em । সেখানে নির্দিষ্ট হওয়া শক্ত - এবং আমি মনে করি না যে যাইহোক এটি ইউনিক্সের স্বার্থে অনেক বেশি হবে, কারণ টার্মিনালগুলি ইউনিক্সের চেয়ে অনেক বেশি কাজ করে।
যাইহোক, ps
সিটিটি যেখানে উদ্বিগ্ন সেখানে কীভাবে আচরণ করা উচিত সে সম্পর্কে পসিক্সও বেশ সুন্দর ।
আছে -a
সুইচ:
- টার্মিনালের সাথে সম্পর্কিত সমস্ত প্রক্রিয়াগুলির জন্য তথ্য লিখুন। বাস্তবায়নগুলি এই তালিকা থেকে অধিবেশন নেতাদের বাদ দিতে পারে।
গ্রেট। সেশন নেতাদের বাদ দেওয়া যেতে পারে। এটি খুব সহায়ক নয়।
এবং -t
:
- টার্মলিস্টে প্রদত্ত টার্মিনালের সাথে সম্পর্কিত প্রক্রিয়াগুলির জন্য তথ্য লিখুন। অ্যাপ্লিকেশনটি নিশ্চিত করবে যে টার্মলিস্টটি একটি
<blank>
কমা বা বিচ্ছিন্ন তালিকার আকারে একক যুক্তি । টার্মিনাল শনাক্তকারীগণ একটি বাস্তবায়ন সংজ্ঞায়িত ফর্ম্যাটে দেওয়া হবে।
... যা অন্য এক ডাউন। তবে এটি এক্সএসআই সিস্টেমগুলি সম্পর্কে এটি বলার অপেক্ষা রাখে না:
- এক্সএসআই-কনফর্মেন্ট সিস্টেমে এগুলিকে দুটি ফর্মের একটিতে দেওয়া হবে: ডিভাইসের ফাইলের নাম (উদাহরণস্বরূপ,
tty04
) বা, যদি ডিভাইসের ফাইল নামটি শুরু হয় tty
, কেবল অক্ষরগুলি অনুসরণকারী সনাক্তকারী tty
(উদাহরণস্বরূপ, 04
) ।
এটি কিছুটা ভাল তবে এটি কোনও পথ নয়। এক্সএসআই সিস্টেমেও -d
স্যুইচ রয়েছে:
- সেশন লিডার বাদে সমস্ত প্রক্রিয়া সম্পর্কিত তথ্য লিখুন।
... যা অন্তত পরিষ্কার। আপনি ফর্ম্যাট স্ট্রিংয়ের -o
পাশাপাশি উতপুট সুইচটিও নির্দিষ্ট করতে পারেন tty
তবে আপনি যেমন উল্লেখ করেছেন যে এর আউটপুট ফর্ম্যাটটি বাস্তবায়ন-সংজ্ঞায়িত। তবুও, আমি মনে করি এটি যতটা পায় তত ভাল। আমি মনে করি যে - অনেক কাজ করে - উপরের কিছুগুলি অন্যান্য ইউটিলিটির সাথে স্যুইচগুলি আপনাকে একটি ভাল ভাল বলপার্ক পেতে পারে। যদিও বেশ সত্যই বলতে চাই, কখনই বা আপনার জন্য এটি কীভাবে ভাঙবে তা আমি জানি না - এবং আমি এমন পরিস্থিতিটি কল্পনা করতে সক্ষম হইনি যে এটির ক্ষেত্রে। তবে, আমি মনে করি সম্ভবত আমরা যুক্ত করি fuser
এবং find
আমরা পথটি যাচাই করতে পারি।
exec 2<>/dev/null
ctty=$(sh -c 'ps -p "$$" -o tty=' <&2)
sid=$(sh -c 'ps -Ao pid= -o tty=|
grep '"$ctty$"' |
grep -Fv "$(ps -do pid=)"' <&2)
find / -type c -name "*${ctty##*/}*" \
-exec fuser -uv {} \; 2>&1 |
grep ".*$ctty.*${sid%%"$ctty"*}"
/dev/null
স্টাফটি কেবল এটি দেখানোর জন্য ছিল যে অনুসন্ধানকারী সাবহেলগুলির কোনওরও সিটিটির সাথে 0,1,2 এর কোনও সংযুক্ত না থাকলে এটি কাজ করতে পারে। যাইহোক, যে মুদ্রণ:
/dev/pts/3: mikeserv 3342 F.... (mikeserv)zsh
এখন উপরেরটিগুলি আমার মেশিনে পুরো পথটি পেয়েছে এবং আমি ধারণা করি এটি বেশিরভাগ ক্ষেত্রেই এটি বেশিরভাগ মানুষের জন্য। আমি এটি ব্যর্থ হতে পারে কল্পনা করতে পারেন। এটি কেবল মোটামুটি হুরিস্টিকস।
এটি সম্ভবত অন্যান্য অনেক কারণে ব্যর্থ হতে পারে তবে আপনি যদি এমন একটি সিস্টেমে থাকেন যা সেশন লিডারকে সিটিটির কাছে সমস্ত বর্ণনাকারী ত্যাগ করার অনুমতি দেয় এবং তবুও স্পিডের অনুমতি অনুসারে পাশাপাশি থাকে, তবে এটি অবশ্যই সহায়তা করবে না। এটি বলেছিল, আমি মনে করি এটি বেশিরভাগ ক্ষেত্রেই বেশ ভাল অনুমান পেতে পারে।
অবশ্যই সবচেয়ে সহজ পদ্ধিতি হল জিনিস যদি আপনি করতে কোনো আপনার ctty সংযুক্ত বর্ণনাকারী ঠিক ...
tty <&2
...অথবা অনুরুপ.
ps
সমাধানটি বেশিরভাগ সিস্টেমে (এবং এরwho
চেয়ে বেশি সাহায্য করে নাps
) কভার করে , সম্ভবত সনাক্তকারীকে একা সামলানোর জন্য কিছুটা আরও কোড সহ ("04" এর মতো)। আমি ভাবছিলাম যে এর থেকেও বেশি বহনযোগ্য সমাধান আছে কিনা।