নতুন প্রক্রিয়া তৈরি করতে আমাদের কাঁটাচামচ করা দরকার কেন?


95

ইউনিক্সে যখনই আমরা একটি নতুন প্রক্রিয়া তৈরি করতে চাই, আমরা বর্তমান প্রক্রিয়াটিকে নকল করি, একটি নতুন শিশু প্রক্রিয়া তৈরি করি যা পিতামাতার প্রক্রিয়ার মতোই; তারপরে আমরা নতুন প্রক্রিয়াটির জন্য প্যারেন্ট প্রসেস থেকে সমস্ত ডেটা প্রতিস্থাপন করতে একটি এক্সিকিউটিভ সিস্টেম কল করি।

আমরা কেন প্রথম স্থানে পিতামাতার প্রক্রিয়ার একটি অনুলিপি তৈরি করব এবং সরাসরি নতুন প্রক্রিয়া তৈরি করব না?


2
এছাড়াও দেখুন unix.stackex بدل.com
এলেন

উত্তর:


61

সংক্ষিপ্ত উত্তরটি হ'ল forkইউনিক্সে, কারণ তত্কালীন বিদ্যমান ব্যবস্থায় এটি ফিট করা সহজ ছিল এবং বার্কলেতে পূর্বসূরি পদ্ধতিতে কাঁটাচামচ ধারণাটি ব্যবহার করেছিল।

ইউনিক্স সময়-ভাগ করে নেওয়ার সিস্টেমের বিবর্তন থেকে (প্রাসঙ্গিক পাঠ্যটি হাইলাইট করা হয়েছে ):

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

1) প্রক্রিয়া সারণির সম্প্রসারণ

2) একটি কাঁটাচামচ কল যোগ করা যা বর্তমান প্রক্রিয়াটি ডিস্কের অদলবদল অঞ্চলে অনুলিপি করে, ইতিমধ্যে বিদ্যমান swap IO প্রিমিটিভগুলি ব্যবহার করে এবং প্রক্রিয়া সারণিতে কিছু সামঞ্জস্য করে।

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

সেই কাগজটি থেকে ইউনিক্স বিকশিত হয়েছে। forkএর পরে execআর কোনও প্রোগ্রাম চালানোর একমাত্র উপায় নেই।

  • vfork কেসটির জন্য আরও কার্যকর কাঁটাচামচ হিসাবে তৈরি করা হয়েছিল যেখানে নতুন প্রক্রিয়া কাঁটাচামচ পরে ঠিক একটি নির্বাহী কাজ করতে চায়। ভিফোর্ক করার পরে, পিতামাতা এবং শিশু প্রক্রিয়াগুলি একই ডেটা স্পেস ভাগ করে দেয় এবং সন্তানের প্রক্রিয়াটি কোনও প্রোগ্রাম চালায় না করে বা প্রস্থান না হওয়া পর্যন্ত পিতামাতার প্রক্রিয়া স্থগিত থাকে।

  • posix_spawn একটি নতুন প্রক্রিয়া তৈরি করে এবং একটি একক সিস্টেম কলে একটি ফাইল চালায়। এটি পরামিতিগুলির একগুচ্ছ লাগে যা আপনাকে নির্বাচিতভাবে কলারের খোলা ফাইলগুলি ভাগ করে নিতে এবং এর সিগন্যাল স্বভাব এবং অন্যান্য বৈশিষ্ট্যগুলি নতুন প্রক্রিয়াতে অনুলিপি করতে দেয়।


5
উত্তম উত্তর তবে আমি যুক্ত করব যে ভিফোর্কে আর ব্যবহার করা উচিত নয়। পারফরম্যান্স পার্থক্য এখন প্রান্তিক এবং এর ব্যবহার বিপজ্জনক হতে পারে। Vfork সম্পর্কে এই এসও প্রশ্ন স্ট্যাকওভারফ্লো.com / প্রশ্নস / ৪৮৫6২৫৫/২ , এই সাইটটি ewontfix.com/7 , এবং "অ্যাডভান্সড ইউনিক্স প্রোগ্রামিং" পৃষ্ঠা 299 দেখুন
রাফেল আহরেন্স

4
Machinations (ডাটা স্ট্রাকচার সেটআপ) প্রয়োজন ব্যবহার করতে posix_spawn()একই পোস্টে-কাঁটাচামচ replumbing কাজ সহজেই করা যাবে ব্যবহার করতে fork()এবং ইনলাইন কোডটির জন্য একটি বাধ্যকারী যুক্তি তোলে fork()অনেক ব্যবহার করতে সহজ হচ্ছে।
জোনাথন লেফলার

34

[আমি আমার উত্তরের কিছু অংশ এখান থেকে পুনরায় বলব ।]

কেন কেবল কমান্ড নেই যা স্ক্র্যাচ থেকে একটি নতুন প্রক্রিয়া তৈরি করে? কেবলমাত্র এখনই প্রতিস্থাপন করা হবে এমন একটি অনুলিপি করা কি অযৌক্তিক এবং অদক্ষ নয়?

আসলে, এটি সম্ভবত কয়েকটি কারণে কার্যকর হবে না:

  1. উত্পাদিত "অনুলিপি" fork()কিছুটা বিমূর্ততা, যেহেতু কার্নেল একটি অনুলিপি-অন- সিস্টেম ব্যবহার করে ; যা সত্যই তৈরি করতে হবে তা হ'ল ভার্চুয়াল মেমরি মানচিত্র। যদি অনুলিপিটি সাথে সাথে কল করে exec(), প্রক্রিয়াটির ক্রিয়াকলাপ দ্বারা এটি সংশোধন করা হত তবে অনুলিপি করা হত এমন বেশিরভাগ ডেটা আসলেই অনুলিপি / তৈরি করতে হয় নি কারণ প্রক্রিয়াটি এর ব্যবহারের প্রয়োজনীয়তার জন্য কিছু করে না।

  2. শিশু প্রক্রিয়াটির বিভিন্ন উল্লেখযোগ্য দিকগুলি (যেমন, এর পরিবেশ) প্রসঙ্গের জটিল বিশ্লেষণের ভিত্তিতে স্বতন্ত্রভাবে সদৃশ বা সেট করতে হবে না etc. এগুলি কেবল কলিং প্রক্রিয়ার মতোই বলে ধরে নেওয়া হয়, এবং এটি আমাদের সাথে পরিচিত মোটামুটি স্বজ্ঞাত সিস্টেম।

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

অবশ্যই, যে একটি কপি ব্যবহার পৃষ্ঠ করে তাদের উপর এর না আরো একটি ফাঁকা স্লেট ব্যবহার তুলনায় দক্ষ - ব্যতীত "ফাঁকা স্লেট" -এর আক্ষরিক কিছুই নয়, এবং বরাদ্দ জড়িত নয়। সিস্টেমে একটি জেনেরিক ফাঁকা / নতুন প্রক্রিয়া টেম্পলেট থাকতে পারে যা এটি একইভাবে অনুলিপি করে, 1 তবে এরপরে অনুলিপি-অন-লিখনের কাঁটা বনাম কোনও কিছুই সংরক্ষণ করতে পারে না। সুতরাং # 1 কেবল দেখায় যে "নতুন" খালি প্রক্রিয়া ব্যবহার করা আরও কার্যকর হবে না।

পয়েন্ট # 2 ব্যাখ্যা করায় কেন কাঁটা ব্যবহার সম্ভবত আরও কার্যকর। কোনও শিশুর পরিবেশ তার পিতামাতার কাছ থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়, এমনকি এটি সম্পূর্ণ ভিন্ন নির্বাহযোগ্য। উদাহরণস্বরূপ, যদি পিতামাতার প্রক্রিয়াটি শেল হয় এবং শিশু একটি ওয়েব ব্রাউজার $HOMEহয় তবে এখনও উভয়ের জন্য একইরকম, তবে যেহেতু হয় পরবর্তীকালে এটি পরিবর্তন করতে পারে তাই এগুলি দুটি পৃথক অনুলিপি হতে হবে। সন্তানের মধ্যে একটি আসল দ্বারা উত্পাদিত হয় fork()

১. এমন একটি কৌশল যা হয়ত আক্ষরিক অর্থে না বোঝায়, তবে আমার বক্তব্যটি হ'ল একটি প্রক্রিয়া তৈরির সাথে ডিস্ক থেকে মেমরির প্রতিচ্ছবিটি অনুলিপি করার চেয়ে আরও বেশি কিছু জড়িত।


3
উভয় পয়েন্ট সত্য হলেও, নির্বাহযোগ্য থেকে নতুন প্রক্রিয়াটি পুনরায় দেওয়ার পরিবর্তে কেন কাঁটা পদ্ধতিটি বেছে নেওয়া হয়েছিল তা সমর্থন করে না।
স্কাইডান

3
আমি মনে করি এটি প্রশ্নের উত্তর দেয়। কাঁটাচামচ ব্যবহার করা হয় কারণ, যেখানে নতুন প্রক্রিয়া তৈরি করা সবচেয়ে কার্যকর উপায়, সেখানে কাঁটাচামচ ব্যবহারের ব্যয়টি নগণ্য (সম্ভবত প্রক্রিয়া তৈরি ব্যয়ের 1% এরও কম)। অন্যদিকে, এমন অনেকগুলি জায়গা রয়েছে যেখানে কাঁটাচামচ একটি এপিআইর (যেমন ফাইল হ্যান্ডলগুলি পরিচালনা করার মতো) নাটকীয়ভাবে আরও দক্ষ বা অনেক সহজ। ইউনিক্সের সিদ্ধান্তটি হ'ল স্পেসিফিকেশনকে সহজ করে তোলা মাত্র একটি এপিআই সমর্থন করা।
কর্ন অ্যাম্মন

1
@SkyDan ঠিক বলেছ, এটি আরো উত্তর এর কেন নয় বরং কেন যা আমি ব্যাখ্যা করবে মানে না শুধু যে এই সহজ পদ্ধিতি হল পছন্দ ছিল, তবে যে এটা সম্ভবত ছিল - যা মার্ক Plotnick আরো সরাসরি উত্তর দেন সবচেয়ে বেশি কার্যকরী পছন্দ (ডেনিস রিচি উদ্ধৃতি অনুসারে: "পিডিপি -7 এর কাঁটাচামচ কল অবশ্যই 27 লাইনের সমাবেশের প্রয়োজন ... এক্সিকিউট যেমন উপস্থিত ছিল না; এর কার্যকারিতা ইতিমধ্যে সম্পাদিত হয়েছিল")। সুতরাং এই "কেন নয়" সত্যই দুটি কৌশল সম্পর্কে এক মিশ্রণ যেখানে একটি অতিমাত্রায় সহজ এবং আরও দক্ষ হিসাবে প্রদর্শিত হয় যখন এটি সম্ভবত হয় না (এর সন্দেহজনক ভাগ্যের সাক্ষী ...
স্বর্ণলোকস

1
গোল্ডিলোকস সঠিক। এমন পরিস্থিতি রয়েছে যেখানে স্ক্র্যাচ থেকে নতুন তৈরি করার চেয়ে কাঁটাচামচ এবং সংশোধন করা সস্তা is সর্বাধিক চরম উদাহরণটি অবশ্যই যে কোনও সময় আপনি নিজেই কাঁটাচামচ আচরণ চান। fork()এটি খুব তাড়াতাড়ি সম্ভব (জিএল হিসাবে উল্লেখ করা হয়েছে, সমাবেশের 27 লাইনের ক্রম অনুসারে) অন্য দিকে তাকিয়ে আপনি যদি "স্ক্র্যাচ থেকে একটি প্রক্রিয়া তৈরি করতে চান" তবে fork()একটি ফাঁকা তৈরি প্রক্রিয়া শুরু করার চেয়ে সামান্য কিছুটা বেশি খরচ হয় (সমাবেশের ২২ লাইন + ফাইল হ্যান্ডলগুলি বন্ধ করার ব্যয়)। সুতরাং forkউভয় কাঁটাচামচ পরিচালনা করে এবং ভাল তৈরি করে, যখন createকেবলমাত্র তৈরি করতে পারে ভাল পরিচালনা করতে পারে।
কর্ট আম্মোন

2
আপনার উত্তরটি হার্ডওয়্যার উন্নতির জন্য উল্লেখ করেছে: ভার্চুয়াল মেমরি, অনুলিপি। এর আগে, forkসমস্ত প্রক্রিয়া মেমরিটি অনুলিপি করে ফেলেছিল এবং এটি ব্যয়বহুল ছিল।
বার্মার

6

আমি মনে করি যে ইউনিক্সের forkনতুন প্রক্রিয়া তৈরির জন্য কেবলমাত্র ফাংশন ছিল তা ইউনিক্স দর্শনের ফলাফল

তারা একটি ফাংশন তৈরি করে যা একটি কাজ ভাল করে। এটি একটি শিশু প্রক্রিয়া তৈরি করে।

নতুন প্রক্রিয়াটির সাথে কেউ কী করে তা প্রোগ্রামারের উপর নির্ভর করে। তিনি exec*ফাংশনগুলির মধ্যে একটি ব্যবহার করতে পারেন এবং একটি আলাদা প্রোগ্রাম শুরু করতে পারেন , বা তিনি একই প্রোগ্রামের দুটি উদাহরণ ব্যবহার করতে পারেন না, যা কার্যকর হতে পারে।

আপনি যেহেতু ব্যবহার করতে পারবেন তাই আপনি একটি বৃহত্তর ডিগ্রি পেতে পারেন

  1. এক্সিকিউট ছাড়া কাঁটাচামচ *
  2. এক্সিকিউট * বা সাথে কাঁটাচামচ
  3. শুধু কাঁটাচামচ ছাড়া এক্সিকিউট *

এবং তদতিরিক্ত, আপনাকে কেবল স্মরণ করতে হবে forkএবং exec*ফাংশন কলগুলি, যা আপনাকে 1970 এর দশকে করতে হয়েছিল।


3
আমি বুঝতে পারি কীভাবে কাঁটাচামচ কাজ করে এবং কীভাবে সেগুলি ব্যবহার করে। তবে আমি কেন একটি নতুন প্রক্রিয়া তৈরি করতে চাই, যখন আমি একই জিনিসটি করতে পারি তবে কম চেষ্টা করে? উদাহরণস্বরূপ, আমার শিক্ষক আমাকে একটি অ্যাসাইনমেন্ট দিয়েছেন যেখানে আমাকে আরজিভিতে পাস হওয়া প্রতিটি সংখ্যার জন্য একটি প্রক্রিয়া তৈরি করতে হয়েছিল, নম্বরটি মৌলিক কিনা তা পরীক্ষা করতে। তবে চূড়ান্তভাবে একই কাজটি করার একটি পথ নয়? আমি মাত্র একটি অ্যারে ব্যবহার করতে এবং প্রতিটি সংখ্যার জন্য একটি ফাংশন ব্যবহার করতে পারতাম ... সুতরাং কেন আমরা মূল প্রক্রিয়াতে সমস্ত প্রক্রিয়াজাতকরণের পরিবর্তে শিশু প্রসেস তৈরি করব?
ব্যবহারকারী 1534664

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

5

প্রক্রিয়া তৈরির দুটি দর্শন রয়েছে: উত্তরাধিকারের সাথে কাঁটাচামচ, এবং যুক্তি দিয়ে তৈরি করুন। ইউনিক্স স্পষ্টতই কাঁটাচামচ ব্যবহার করে। (উদাহরণস্বরূপ ওএসই, এবং ভিএমএস তৈরি পদ্ধতি ব্যবহার করে) উত্তরাধিকারের মাধ্যমে, এই নতুন বৈশিষ্ট্যগুলি বিদ্যমান প্রোগ্রামগুলি পরিবর্তনের পরিবর্তে যুক্ত করা যেতে পারে! একটি যুক্ত-যুক্ত-যুক্তিগুলির মডেল ব্যবহার করে, নতুন বৈশিষ্ট্য যুক্ত করার অর্থ ক্রিয়েট কলটিতে নতুন যুক্তি যুক্ত করা। ইউনিক্স মডেলটি সহজ।

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

কাঁটাচামচ / এক্সিকিউটিভ মডেলটি কোনও নির্দিষ্ট বাচ্চাকে কাঁটাচামচ এবং এক্সেকের মধ্যে স্থাপন করে একটি মৌলিকভাবে অদ্ভুত পরিবেশের অধিকারী হওয়ার ক্ষমতাও সরবরাহ করে। উত্তরাধিকার সূত্রে প্রাপ্ত ফাইল বর্ণনাকারীর মতো জিনিস especially (স্টাডিও এফডির একটি এক্সটেনশন।) ক্রিয়ে মডেল এমন কোনও কিছু উত্তরাধিকারী হওয়ার সুযোগ দেয় না যা ক্রিয়েট কলের নির্মাতারা কল্পনা করেননি।

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


ফাইলের বর্ণনাকারীরা "স্টডিওয়ের একটি এক্সটেনশন" নয়; stdio ফাইল পয়েন্টারগুলি ফাইল বর্ণনাকারীর চারপাশে একটি মোড়ক। ফাইল বর্ণনাকারী প্রথমে এসেছিল এবং সেগুলি হ'ল মৌলিক ইউনিক্স I / O হ্যান্ডলগুলি। তবে, অন্যথায়, এটি একটি ভাল পয়েন্ট।
স্কট

2

কাঁটাচামচ () ফাংশনটি কেবল পিতা প্রক্রিয়া অনুলিপি করার জন্য নয়, এটি একটি মান দেয় যা প্রসেসটি হ'ল পিতা বা পুত্র প্রক্রিয়া, নীচের চিত্রটি ব্যাখ্যা করে যে আপনি কীভাবে কাঁটা () ব্যবহার করতে পারেন পিতা এবং একটি হিসাবে পুত্র:

এখানে চিত্র বর্ণনা লিখুন

যেমন প্রক্রিয়াটি যখন পিতা কাঁটাচামচ হয় () পুত্র প্রক্রিয়া আইডি ফিরিয়ে দেয় PID অন্যথায় এটি ফিরে আসে0

উদাহরণস্বরূপ আপনি যদি কোনও প্রক্রিয়া (ওয়েব সার্ভার) অনুরোধগুলি গ্রহণ করেন এবং প্রতিটি অনুরোধে son processএই অনুরোধটি প্রক্রিয়া করার জন্য এটি তৈরি করে থাকেন তবে এটি ব্যবহার করতে পারেন , এখানে পিতা এবং তার পুত্রদের আলাদা আলাদা কাজ রয়েছে।

সুতরাং, কোনও প্রক্রিয়াটির অনুলিপি চালানো কাঁটাচামচ () হিসাবে সঠিক জিনিস নয়।


5
যদিও এটি সত্য, এটি প্রশ্নের উত্তর দেয় না। প্রক্রিয়া তৈরির জন্য কেন কাঁটা লাগানো দরকার, যদি আমি অন্যরকম এক্সিকিউটেবল চালাতে চাই?
স্কাইডান

1
আমি স্কাইড্যানের সাথে একমত - এটি প্রশ্নের উত্তর দেয় না। posix_spawn কি 30 বছর আগে কাল্পনিক হয়ে থাকতে পারে (আগে Posix অস্তিত্ব) একটি হিসেবে একটি কিছুটা কল্পনাকারী সংস্করণ fork_execve ফাংশন; যেটি একটি নতুন প্রক্রিয়া তৈরি করে, কার্যকরভাবে তার চিত্রের সূচনা করে, পিতামাতার প্রক্রিয়াটির চিত্র অনুলিপি করার এমনকি ইঙ্গিত না করে (যুক্তি তালিকা, পরিবেশ এবং প্রক্রিয়া বৈশিষ্ট্যগুলি (যেমন, ওয়ার্কিং ডিরেক্টরি) বাদ দিয়ে) এবং ফিরে আসে কলারের কাছে নতুন প্রক্রিয়ার পিআইডি (প্যারেন্ট প্রসেস)
স্কট

1
সন্তানের কাছে "পিতামাতা" তথ্য দেওয়ার অন্যান্য উপায় রয়েছে। fork আপনি যদি forkপ্রথম স্থানে চান বলে ধরে
কর্ট অ্যামোন

0

I / O পুনঃনির্দেশগুলি কাঁটাচামচ করার পরে এবং নির্বাহের আগে খুব সহজেই প্রয়োগ করা হয়। শিশুটি সচেতন হয়েই শিশু, পিতামাতার উপর কোনও ক্ষতি না করেই ফাইল বর্ণনাকারী বন্ধ করতে পারে, নতুন এফডি নম্বর, ডুপ () বা ডুপ 2 () খুলতে পারে all এটি করার পরে এবং সম্ভবত কোনও পছন্দসই পরিবেশের পরিবর্তনশীল পরিবর্তনগুলি (পিতামাতার উপরও প্রভাব ফেলছে না), এটি উপযুক্ত পরিবেশে নতুন প্রোগ্রামটি সম্পাদন করতে পারে।


আপনি এখানে যা করছেন তা হ'ল জিম ক্যাথির উত্তরের তৃতীয় অনুচ্ছেদটি কিছুটা বিশদভাবে পুনরাবৃত্তি করছে ।
স্কট

-2

আমি মনে করি এখানকার প্রত্যেকে জানে যে কাঁটাচামচ কীভাবে কাজ করে তবে প্রশ্নটি হল কেন কাঁটা ব্যবহার করে আমাদের পিতামাতার সঠিক নকল তৈরি করা দরকার? উত্তর ==> সার্ভারের একটি উদাহরণ নিন (কাঁটাচামচা ছাড়াই), যখন ক্লায়েন্ট -১ সার্ভারটিতে অ্যাক্সেস করছে, একই সময়ে দ্বিতীয় ক্লায়েন্ট -২ উপস্থিত হয়ে সার্ভারটি অ্যাক্সেস করতে চায় তবে সার্ভার নতুন আগতদের অনুমতি দেয় না ক্লায়েন্ট -২ কারণ সার্ভার ক্লায়েন্ট -১ পরিবেশন করতে ব্যস্ত তাই ক্লায়েন্ট -২ অপেক্ষা করতে হবে after ক্লায়েন্ট -১ এর সমস্ত পরিষেবা শেষ হয়ে গেছে, ক্লায়েন্ট -২ এখন সার্ভার অ্যাক্সেস করতে সক্ষম হয়েছে। এখন একই সময়ে বিবেচনা করুন কিনা তা বিবেচনা করুন ক্লায়েন্ট -3 উপস্থিত, সুতরাং ক্লায়েন্ট -3 ক্লায়েন্ট 2-এর সমস্ত পরিষেবা শেষ না হওয়া পর্যন্ত অপেক্ষা করতে হবে the একই পরিস্থিতিতে যেখানে হাজার হাজার ক্লায়েন্টকে সার্ভার অ্যাক্সেস করতে হবে সেই পরিস্থিতিটি নিন ... তারপরে সমস্ত ক্লায়েন্টকে অপেক্ষা করুন (সার্ভার ব্যস্ত !!)।

এটি সার্ভারের সঠিক ডুপ্লিকেট অনুলিপি (অর্থাত্ শিশু) তৈরি করে এড়ানো যায়, যেখানে প্রতিটি শিশু (যা তার পিতা বা মাতা অর্থাৎ সার্ভারের হুবহু অনুলিপি হয়) নতুন আগত ক্লায়েন্টকে উত্সর্গীকৃত হয়, একসাথে সমস্ত ক্লায়েন্ট একই অ্যাক্সেস করে সার্ভার।


এই কেন সার্ভার প্রসেস ক্লায়েন্ট রিকোয়েস্ট হ্যান্ডলিং একক থ্রেডেড করা উচিত হবে না, পরপর যখন তারা নাড়াচাড়া করতে পারেন একই সময়ে যেমন, পৃথক প্রক্রিয়াতে -। তবে মাল্টি-থ্রেড সার্ভার মডেলটি সহজেই শ্রোতার প্রক্রিয়া সহ প্রয়োগ করা যেতে পারে যা ক্লায়েন্টদের কাছ থেকে অনুরোধ গ্রহণ করে এবং ক্লায়েন্ট-পরিষেবা প্রোগ্রামটি চালানোর জন্য একটি নতুন প্রক্রিয়া তৈরি করে। forkঅভিভাবক প্রক্রিয়াটি অনুলিপি করে কল করার মাধ্যমে দেওয়া একমাত্র সুবিধাটি হ'ল আপনার দুটি পৃথক প্রোগ্রাম থাকতে হবে না - তবে পৃথক প্রোগ্রাম (যেমন, inetd) থাকা সিস্টেমকে আরও মডুলার করে তুলতে পারে।
স্কট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.