কোনও প্রক্রিয়াটির পিতামাতার প্রক্রিয়াটি পরিবর্তন করবেন?


14

কোনও প্রক্রিয়ার পিতামাতার প্রক্রিয়া পরিবর্তন করা কি সম্ভব? যদি হ্যাঁ, কিভাবে?

উদাহরণ স্বরূপ,

  • কীভাবে screenএকটি screenসেশন এবং এটির অভ্যন্তরে প্রসেসগুলি বিভিন্ন শেল প্রসেসের সাথে সংযুক্ত করা যায়? পিতামাতার প্রক্রিয়া পরিবর্তন আছে?

  • আমি শেল প্রক্রিয়া পরিবর্তনের অন্যান্য উপায়গুলির বিষয়ে শুনেছি বলে মনে হচ্ছে যেখানে কোনও প্রোগ্রাম চলছে, তবে আমার মনে নেই। প্রোগ্রামটির পিতামাতার প্রক্রিয়াতেও কি কোনও পরিবর্তন আছে?

  • আমি ভেবেছিলাম disownএকটি প্রক্রিয়া প্রক্রিয়াটির পিতামাতার প্রক্রিয়া পরিবর্তন করে, কেবলমাত্র নাম থেকেই disownবোঝা যায়। তবে আমি পেয়েছি এটি সত্য নয়।

  • ইমাকস ক্লায়েন্টটি বিভিন্ন টার্মিনাল ট্যাবে ইমাস সার্ভারের সাথে সংযুক্ত করতে পারে। পিতামাতার প্রক্রিয়া পরিবর্তন আছে?


disownশেলের অভ্যন্তরীণ শিশু প্রক্রিয়াগুলির থেকে কেবলমাত্র প্রদত্ত শিশুটিকে সরিয়ে দেয়। সন্তানের পিপিআইডি শেলের মধ্যে থেকে যায়। শেলটি ভুলে গেছে যে এটি কখনও সেই শিশুটিকে শুরু করেছিল, তবে কার্নেলটি মনে পড়ে।
ওয়ারেন ইয়ং

প্রক্রিয়া তার পিতামাতার মনে আছে?
টিম

এটি জানতে চাইলে, এটি কল করে getppid(2), একটি সিস্টেম কল এবং সিস্টেম কলগুলি কার্নেল দ্বারা পরিচালিত হয়। কোনও কলটি কলটি জারি করে, মানটি সংরক্ষণ করে এবং তার প্যারেন্টেজ পরিবর্তনের পরে সেই মানটি ব্যবহার করে বিভ্রান্ত হতে পারে। এখানে একটি রেসের শর্তের সুযোগ রয়েছে।
ওয়ারেন ইয়ং

আকর্ষণীয় নতুন কার্নেল বৈশিষ্ট্যের মতো মনে হচ্ছে।
চককট্রিল

উত্তর:


14

কোনও প্রক্রিয়াটির প্যারেন্ট প্রসেস আইডি (পিপিড) কার্নেলের বাইরে পরিবর্তন করা যায় না; কোনও সেটপিড সিস্টেম কল নেই। প্রসেসস প্যারেন্টস বন্ধ হওয়ার পরে কার্নেল কেবল পিপিডকে (পিড) 1 এ পরিবর্তন করবে - যদি প্রক্রিয়াটি পিতামাতাকে সমাপ্ত করা হয়েছিল এমন কোনও সিগন্যালের প্রতিক্রিয়া না জানায়। এই ঘটতে জন্য, প্রক্রিয়া চাহিদা বিভিন্ন সংকেত উপেক্ষা করেছে ( SIGHUP, SIGTERMইত্যাদি) পূর্বেই।

screen(1)বিচ্ছিন্নকরণ এবং পুনরায় সংযুক্তি পরিচালনা করার একটি খুব মার্জিত উপায় রয়েছে। আপনি যখন প্রথম শুরু করবেন screen, আপনি আসলে একটি ইউজার ইন্টারফেস (ui) শুরু করছেন, এটি ডিফল্টরূপে একটি ডেমন (সেশন ম্যানেজার) তৈরি করবে। এই ডিমনটির সাথে কোনও টার্মিনাল যুক্ত নেই, একটি নতুন প্রক্রিয়া গ্রুপ ( setpgrp(2)), একটি নতুন সেশন আইডি ( setsid(2))। হিসাবে চলমান SCREENডিমনটি সিউডো-টার্মিনালগুলি ( pty) এর সাথে সংযুক্ত উপ-প্রক্রিয়াগুলি তৈরি করবে , তারপরে ptys এবং ui ( screen) থেকে ডেটা মাল্টিপ্লেক্স করবে । উপ-প্রক্রিয়াগুলি মনে করে যে তারা সত্যিকারের টার্মিনালের সাথে কথা বলছে।

যদি ইউআই screenসমাপ্ত হয়, ডেমনটি SCREENএখনও চলমান থাকবে, ডেটা বাফার করবে, সংকেতগুলি পরিচালনা করবে, নতুন ইউআইয়ের অপেক্ষায় থাকবে ইত্যাদি ইত্যাদি কারণ এটি একটি পৃথক প্রক্রিয়া গোষ্ঠী এবং নিজস্ব অধিবেশন। আপনি যখন নতুন ইউআইয়ের সাথে পুনরায় যোগাযোগ করবেন screen, তখন ডিমনটি মাল্টিপ্লেক্সে যেমন চলবে তেমন চালিয়ে যাবে। ডেমনটি সমস্ত উপ-প্রক্রিয়াগুলি শেষ না হওয়া, হত্যা না করা, মারাত্মক ত্রুটির মুখোমুখি না হওয়া বা হোস্ট পুনরায় চালু হওয়া অবধি চলমান থাকবে।


ধন্যবাদ। আমি যোগ করেছি "ইমাকস ক্লায়েন্টটি ভিন্ন টার্মিনাল ট্যাবে ইমাস সার্ভারের সাথে সংযুক্ত করতে পারে parent পিতামাতার প্রক্রিয়াটির কোনও পরিবর্তন আছে?"
টিম

1
প্রতিটি প্রক্রিয়াটির একমাত্র পিতা-মাতা থাকে, যতক্ষণ না পিতা বা মাতা মারা যায় বা মারা যায়। যদি এটি মারা যায় তবে বিন্দুটি মোটা হবে। যদি পিতামাতার মৃত্যু হয়, তবে পিপিআইডি 1 হয়ে যায়, initপ্রক্রিয়া। এই পিতামাতার প্রক্রিয়াটি কেবলমাত্র তখনই পরিবর্তিত হয় - যখন পিতামাতার প্রক্রিয়াটি সমাপ্ত হয়। ইন্টারপ্রসেস যোগাযোগের মাধ্যমে সংযোগ স্থাপনের (পাইপ, সকেট ইত্যাদি) পিপিআইডি-তে কোনও প্রভাব নেই।
1:37

ইমাকস কীভাবে কোনও ক্লায়েন্টকে বিভিন্ন টার্মিনাল ট্যাবগুলিতে একটি সার্ভারের সাথে সংযুক্ত করে?
টিম

সার্ভার সংযোগের জন্য অপেক্ষা করে একটি সকেটে (সাধারণত একটি ইউনিক্স ডোমেন সকেট ফাইল) শুনবে। ক্লায়েন্ট (গুলি) সেই সকেটে একটি সংযোগ খুলবে। ট্যাবগুলি ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের সাথে অপ্রাসঙ্গিক, এটি বিভিন্ন ট্যাব, বিভিন্ন টেমিনাল এমুলেটস (xterm বনাম rxvt বনাম টার্মিনাল), বা xemacs হতে পারে। প্রতিটি ক্লায়েন্ট জানেন কোথায় সংযোগ করতে হবে, তাই এটি যে কোনও জায়গা থেকে হতে পারে।
আর্জেস


-2

আমি বুঝেছি. এটি করার জন্য আপনাকে কিছু মডিউল লেখার জন্য কার্নেলটি পরিবর্তন করতে হবে! আমি মনে করি এটি কিছু ক্ষেত্রে কার্যকর হবে। উদাহরণস্বরূপ আপনি কিছু দীর্ঘ পরিশ্রম করেন তারা এক ঘন্টার জন্য অনেক সংস্থান গ্রহণ করে ... এবং যখন সিস্টেম প্রতিক্রিয়া জানায় না (এই ক্ষেত্রে যথারীতি) আপনি কিছু অবিশ্বাস্য ক্রিয়া করেন (কারণ আপনার যা করা দরকার এবং আপনি নিশ্চিত হন না যে আপনি ক্লিক করেছেন সঠিক জায়গায় মাউস যাতে সিস্টেম দীর্ঘ সময় সাড়া না দেয়) এবং দুর্ঘটনাক্রমে পিতামাতার প্রক্রিয়াটি মেরে ফেলে। সিস্টেম সাধারণত সব শিশুকে হত্যা করে! তবে যদি শিশু প্রক্রিয়াটি মূল এবং পিতামাতাই কেবলমাত্র সাধারণ ব্যবহারকারী এবং ক্রিয়াটি অর্ডিনাল ব্যবহারকারীকে করে তোলে তবে এই প্রক্রিয়াটি কোনও ক্ষেত্রেই মারা যায় না! এবং তার পিতামাতা পিআইডি 1 দিয়ে প্রবর্তিত হবে system তবে আপনি পারবেন না !!! স্ট্যান্ডার্ড আপনি su সহ সাধারণ ব্যবহারকারী হিসাবে টার্মিনাল থেকে রুট হিসাবে আপগ্রেড সিস্টেম শুরু করেন। কেন? সুতরাং কনসোলে সমস্ত ভুল এবং সতর্কতা পেতে। বিশেষত আপগ্রেড করার ইউটিলিটি হ'ল জিইউআই। তারা এই তথ্যটি কিছুই পায় না ... আমার মনে আছে উইন্ডোজ ওএসে এটি করা যায়। বিশেষ WinAPI ফাংশন রয়েছে। লিনাক্সে কেন এটি করা যায় না? এটি পরিষ্কার হয় না ... এটি সাধারণ জিনিস !!!

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