যে প্রক্রিয়াটি অস্বীকার করা হয়েছে এবং এর টার্মিনালটি হারিয়েছে তার ফলাফল কী হবে?


26

যদি আমি ভার্চুয়াল টার্মিনালটি বন্ধ করি, যেখানে কিছু প্রক্রিয়া শুরু হয়েছিল, আউটপুটটি কি কেবল সোজা চলে যায় /dev/null, বা এটি কোনওভাবে মেমরিকে দূষিত করতে পারে? এরপরে যে কোনও মুহুর্তে এটি পড়া চালিয়ে যাওয়ার জন্য আমি কীভাবে আউটপুটটি দখল করতে পারি?

[সম্পাদনা]: সুতরাং, কোনও প্রক্রিয়াটি অস্বীকার করার মুহূর্তটি কার্যকরভাবে এর আউটপুট নিয়ন্ত্রণের জন্য আমার শক্তির শেষ হয়ে যায়?

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


2
"আমি যেভাবেই আউটপুট ধরতে পারি" এর জন্য: নোংরা কৌশল ছাড়া নয় not তবে দেখুন কীভাবে আমি এটিকে চলমান প্রক্রিয়াটি অস্বীকার করব এবং এটিকে একটি নতুন স্ক্রিন শেলের সাথে যুক্ত করব? এবং নোংরা কৌশলগুলির জন্য অন্যান্য উত্সাহিত প্রশ্নগুলি (সমস্ত প্রোগ্রামে একটি ডিবাগার সংযুক্ত করার এবং কোনওভাবে এটি আলাদা আউটপুট ফাইল খোলার উপর ভিত্তি করে)।
— গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

এই প্রশ্নের লিঙ্কের জন্য ধন্যবাদ। এটি আমাকে এখনও পর্যন্ত সেরা উত্তর দিয়েছে! বিশেষত চতুর rettyপ্রোগ্রাম।
— রোজিট্রিজেভিয়াকজ

1
সম্পর্কিত প্রশ্নের এই উত্তরটি দেখুন ।
— স্টাফেন গিমেনেজ

উত্তর:


11

কোনও প্রক্রিয়া "অস্বীকৃত" হওয়ার বিষয়টি ইন্টারেক্টিভ শেলটির কেবল একটি অর্থ যা এই প্রক্রিয়াটি তৈরি করেছিল has এর অর্থ হ'ল শেলটি তার কাজের সারণিতে প্রক্রিয়াটি (আর) অন্তর্ভুক্ত করে না এবং শেলটি প্রস্থান করার পরে সাইনআপ এই প্রক্রিয়ায় প্রেরণ করা হবে না। এটি আপনার প্রশ্নের সাথে সত্যই সম্পর্কিত নয়।

মুছে ফেলা ভার্চুয়াল টার্মিনালে প্রেরিত আউটপুটগুলিতে কী ঘটে যায় সে সম্পর্কে: আমি নিজে কিছু পরীক্ষা করেছিলাম এবং আমি লক্ষ্য করেছি যে /dev/pts/xডিভাইসগুলি অ্যাক্সেসযোগ্য নয়, এবং যতক্ষণ পর্যন্ত এগুলিতে নির্দেশিত সমস্ত ফাইলডেস্ক্রিপ্টারগুলি বন্ধ না করা হয় ততক্ষণে আবার বরাদ্দ দেওয়া হবে না। সুতরাং, আমি মুছে ফেলা টার্মিনালে লেখার কেন সংরক্ষণ করার কোনও কারণ দেখতে পাচ্ছি না। আমার ধারণা এটি পসিক্স দ্বারা সংজ্ঞায়িতও নয়।

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

প্রক্রিয়া সমাপ্তির শেষ মন্তব্য সম্পর্কে, আমি আসলে কী হচ্ছে তা আমি জানি না, তবে আমি অধিবেশনটির সময় প্রক্রিয়া গোষ্ঠীর অগ্রভাগ / পটভূমির সাথে সম্পর্কিত সংকেতগুলি (সিগটু, সিগটিন, সিগআপ, বা অন্যান্য) নিয়ে অদ্ভুত আচরণগুলি সন্দেহ করব when নেতা প্রস্থান করে (যেমন su, আপনি উল্লিখিত ক্ষেত্রে)।

সম্পাদনাটির উত্তর : না, আউটপুট সম্পর্কিত ক্ষেত্রে, কোনও প্রক্রিয়াটি অস্বীকার করার পরে কিছুই পরিবর্তন হয় না: এটি এখনও তার নিয়ন্ত্রণকারী টার্মিনালের সাথে সংযুক্ত থাকে (যদি না এটি ইতিমধ্যে ডিমনগুলির মতো নিজেকে বিচ্ছিন্ন করে)। আপনি এটি ব্যবহার করে দেখতে পারেন ps। তবে, আপনি এই প্রক্রিয়াটির জন্য শেলের দ্বারা প্রদত্ত fg/ bg/ jobsআদেশগুলি আর ব্যবহার করতে পারবেন না । তার অর্থ এটি টার্মিনাল থেকে ইনপুট দিয়ে খাওয়ানো কঠিন হতে পারে (অগ্রভাগ প্রক্রিয়া গ্রুপে থাকা প্রয়োজন)।

-
1. যদি না প্রক্রিয়াটি প্রস্তুত হয় বা কিছু ডিবাগিং সরঞ্জামগুলি দিয়ে হাইজ্যাক করা হয় (উপরে মন্তব্যগুলি দেখুন)।


1
এটি কিছুটা স্পষ্ট করার জন্য ধন্যবাদ আসলে কোনও প্রক্রিয়া অস্বীকার করার বিষয়টি এখনও আমার প্রশ্নের সাথে সম্পর্কিত: একটি প্রক্রিয়া অস্বীকার করার পরে, আমি এর আউটপুট নিয়ন্ত্রণের ক্ষমতাটি looseিলা করে দেখছি, তাই না? (এমনকি যদি টার্মিনালটি বন্ধ হয়ে গেছে) that কেসটি অন্তর্ভুক্ত করার জন্য আমি প্রশ্নটি সম্পাদনা করব।
— rozcietrzewiacz

4

এই নির্দিষ্ট প্রশ্নের সমাধান করার জন্য:

যদি আমি ভার্চুয়াল টার্মিনালটি বন্ধ করি, যেখানে কিছু প্রক্রিয়া শুরু হয়েছিল, আউটপুটটি কেবল সোজা / dev / নলে চলে যায়, বা এটি কোনওভাবে মেমরিকে দূষিত করতে পারে?

এটির সাথে সংযুক্ত টার্মিনাল এবং প্রোগ্রামগুলি একটি ফাইলের মতো পড়তে এবং লিখে এটি টিটিআই ডিভাইসের মাধ্যমে যোগাযোগ করে। বিশেষত, একটি ভার্চুয়াল টার্মিনাল একটি "সিউডো-টিটি" (সংক্ষেপে "পিটিআই") তৈরি করে এবং তারপরে একটি শেল (বা অন্য) প্রক্রিয়া তৈরি করে এবং সেই প্রক্রিয়াটির স্টিডিন / আউট / এররকে পিটিআইয়ের সাথে সংযুক্ত করে। (বিবরণ অপারেটিং সিস্টেম দ্বারা পৃথক।)

যখন আপনি ভার্চুয়াল টার্মিনালটি বন্ধ করেন, ভার্চুয়াল টার্মিনালটি সংযোগটির শেষটি বন্ধ করে দেয় (pty "মাস্টার")। এর পরে, যদি সংযোগের অন্য প্রান্তে প্রোগ্রামটি টিটি-তে লিখিত হয়, একটি ত্রুটি ফিরে আসে এবং ডেটা কোথাও যায় না। একইভাবে, এটি টিটিটি থেকে পড়লে এটি কোনও ইওএফ (ফাইলের শেষ) সূচক ফিরে পাবেন।


ধন্যবাদ - আরও কিছু প্রোগ্রামিং দৃষ্টিকোণ থেকে সুন্দর এবং স্পষ্ট ব্যাখ্যা।
— rozcietrzewiacz

3

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

দেখুন:

/programming/593724/redirect-stderr-stdout-of-a-process-after-its-been-started-using-command-line

একটি সহায়ক স্ক্রিপ্ট http://users.linpro.no/ingvar/fdswap.sh.txt এ উপলব্ধ ।


0

এই প্রশ্নটির দিকে আমাকে ইঙ্গিত করে গিলসের মন্তব্যে ধন্যবাদ , আমি রেটি নামক একটি প্রোগ্রাম সম্পর্কে শিখেছি ।

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

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