আমি গুগলে এই চারটির মধ্যে পার্থক্যটি সন্ধান করছি এবং আমি প্রত্যাশা করেছি যে এটি সম্পর্কে প্রচুর পরিমাণে তথ্য থাকবে, তবে চারটি কলের মধ্যে সত্যিকারের কোনও শক্ত তুলনা হয়নি।
আমি এই সিস্টেম কলগুলির মধ্যে পার্থক্যগুলি এবং এক্ষেত্রে আমি কী পেয়েছি তা দেখতে এক ধরণের বেসিক এক নজরে সংকলনের চেষ্টা করার বিষয়ে সেট করেছি। এই সমস্ত তথ্য সঠিক / আমি কি গুরুত্বপূর্ণ কিছু অনুপস্থিত?
Fork
: কাঁটাচামচ কলটি মূলত বর্তমান প্রক্রিয়াটির একটি সদৃশ করে তোলে, প্রায় প্রতিটি উপায়ে একইরকম (সমস্ত কিছু অনুলিপি করা হয় না, উদাহরণস্বরূপ, কিছু বাস্তবায়নে রিসোর্স সীমা থাকে তবে ধারণাটি সম্ভব যতটা সম্ভব একটি অনুলিপি তৈরি করা)।
নতুন প্রক্রিয়া (শিশু) একটি পৃথক প্রক্রিয়া আইডি (পিআইডি) পায় এবং পুরাতন প্রক্রিয়ার পিআইডি (পিতামাতাকে) তার প্যারেন্ট পিআইডি (পিপিআইডি) হিসাবে রাখে। যেহেতু দুটি প্রক্রিয়া এখন ঠিক একই কোড চলছে, তারা বলতে পারেন কাঁটাচামড়ার রিটার্ন কোড দ্বারা কোনটি - শিশু 0 পায়, পিতামাতারা সন্তানের পিআইডি পান। এটি অবশ্যই, কাঁটা কলটি কাজ করে ধরে নিচ্ছে - তা না থাকলে কোনও শিশু তৈরি হয় না এবং পিতামাতার একটি ত্রুটি কোড পায় gets
Vfork
: ভিফোর্ক এবং কাঁটাচামচের মধ্যে মূল পার্থক্য হ'ল ভিফোর্ক () দিয়ে যখন একটি নতুন প্রক্রিয়া তৈরি করা হয় তখন পিতামাতার প্রক্রিয়াটি সাময়িকভাবে স্থগিত করা হয় এবং সন্তানের প্রক্রিয়াটি পিতামাতার ঠিকানার জায়গা ধার নিতে পারে। শিশুটির প্রক্রিয়াটি প্রস্থান না করা পর্যন্ত, বা কল সম্পাদন () কল না করা পর্যন্ত এই অদ্ভুত পরিস্থিতি অব্যাহত থাকে, যেখানে পিতামাতার প্রক্রিয়াটি অব্যাহত থাকে।
এর অর্থ হ'ল একটি ভিফোর্ক () এর শিশু প্রক্রিয়াটি অপ্রত্যাশিতভাবে পিতামাতার প্রক্রিয়াটির পরিবর্তনশীলগুলি এড়াতে অবশ্যই সতর্ক থাকতে হবে। বিশেষত, শিশু প্রক্রিয়াটি vfork () কলযুক্ত ফাংশন থেকে ফিরে আসবে না এবং এটি প্রস্থান () প্রস্থান করতে হবে না (যদি এটি প্রস্থান করার প্রয়োজন হয় তবে এটি _exit () ব্যবহার করা উচিত; আসলে এটি সন্তানের ক্ষেত্রেও সত্য একটি সাধারণ কাঁটাচামচ ())।
Exec :
এক্সিকিউট কলটি মূলত পুরো বর্তমান প্রক্রিয়াটিকে নতুন প্রোগ্রামের সাথে প্রতিস্থাপনের একটি উপায়। এটি প্রোগ্রামটিকে বর্তমান প্রক্রিয়া জায়গাতে লোড করে এবং এন্ট্রি পয়েন্ট থেকে চালায়। exec () ফাংশন দ্বারা নির্বাহযোগ্য পয়েন্টের সাথে বর্তমান প্রক্রিয়াটিকে প্রতিস্থাপন করে। এক্সিকিউট () ত্রুটি না থাকলে নিয়ন্ত্রণ কখনই আসল প্রোগ্রামে ফিরে আসে না।
Clone :
কাঁটাচামচ হিসাবে ক্লোন একটি নতুন প্রক্রিয়া তৈরি করে। কাঁটাচামচ ভিন্ন নয়, এই কলগুলি চাইল্ড প্রক্রিয়াটিকে কলিং প্রক্রিয়া, যেমন মেমরির স্থান, ফাইল বর্ণনাকারীর সারণী এবং সিগন্যাল হ্যান্ডলারের সারণীর মতো কলিং প্রক্রিয়ার সাথে তার সম্পাদন প্রসঙ্গে কিছু অংশ ভাগ করার অনুমতি দেয়।
যখন শিশু প্রক্রিয়াটি ক্লোন দিয়ে তৈরি করা হয়, এটি ফাংশন অ্যাপ্লিকেশন fn (আরগ) সম্পাদন করে। (এটি কাঁটাচামচ থেকে পৃথক, যেখানে মূল কাঁটা কলের বিন্দু থেকে শিশুতে মৃত্যুদন্ড কার্যকর হয়)) fn আর্গুমেন্ট একটি ক্রিয়াকলাপের জন্য নির্দেশক যা এটি কার্যকর করার শুরুতে শিশু প্রক্রিয়া দ্বারা ডাকা হয়। আরগ আর্গুমেন্টটি fn ফাংশনে প্রেরণ করা হয়।
যখন fn (আরগ) ফাংশন অ্যাপ্লিকেশনটি ফিরে আসে, শিশু প্রক্রিয়াটি সমাপ্ত হয়। Fn দ্বারা প্রত্যাশিত পূর্ণসংখ্যা হ'ল শিশু প্রক্রিয়াটির প্রস্থান কোড। শিশু প্রক্রিয়াটি প্রস্থান (2) কল করে বা মারাত্মক সংকেত পাওয়ার পরেও স্পষ্টভাবে শেষ হতে পারে।
তথ্য অর্জিত ফর্ম:
- কাঁটাচামচ এবং এক্সেকের মধ্যে পার্থক্য
- http://www.allinterview.com/showanswers/59616.html
- http://www.unixguide.net/unix/programming/1.1.2.shtml
- http://linux.about.com/library/cmd/blcmdl2_clone.htm
এই পড়ার সময় দেবার জন্য ধন্যবাদ ! :)
fork()
লিনাক্সে রয়েছে এবং যা সম্ভবত সমস্ত বিএসডি থেকে আলাদাভাবে প্রয়োগ করা হয়) তার পিতামাতার ঠিকানার জায়গা ধার করে নেয়। কল করে execve()
বা করা ছাড়াও যা কিছু _exit()
করা যায় তার পিতামাতাকে গোলমাল করার একটি দুর্দান্ত সম্ভাবনা রয়েছে। বিশেষত, exit()
কলগুলি atexit()
হ্যান্ডলারগুলি এবং অন্যান্য "চূড়ান্তকরণকারী", যেমন: এটি স্টডিও স্ট্রিমগুলিকে প্রবাহিত করে। একটি vfork()
শিশু থেকে ফিরে সম্ভাব্য (পূর্বের মত একই সতর্কীকরণ) পিতামাতার স্ট্যাক বিঘ্নিত হবে।
fork
সিস্কেলকে কল করে ?