فورک سسٹم کال لینکس۔

Fork System Call Linux



فورک سسٹم کال ایک نیا عمل بنانے کے لیے استعمال ہوتی ہے۔ نیا تخلیق شدہ عمل بچوں کا عمل ہے۔ وہ عمل جو کانٹا کہتا ہے اور ایک نیا عمل پیدا کرتا ہے وہ والدین کا عمل ہے۔ بچے اور والدین کے عمل بیک وقت انجام دیے جاتے ہیں۔

لیکن بچے اور والدین کے عمل مختلف میموری جگہوں پر رہتے ہیں۔ ان میموری اسپیسز میں ایک جیسا مواد ہوتا ہے اور جو بھی آپریشن ایک عمل سے کیا جاتا ہے وہ دوسرے عمل کو متاثر نہیں کرے گا۔







جب بچہ عمل پیدا کرتا ہے اب دونوں عملوں میں ایک ہی پروگرام کاؤنٹر (PC) ہوگا ، لہذا یہ دونوں عمل ایک ہی اگلی ہدایات کی طرف اشارہ کریں گے۔ والدین کے عمل سے کھولی گئی فائلیں بچے کے عمل کے لیے یکساں ہوں گی۔



بچے کا عمل بالکل اس کے والدین کی طرح ہے لیکن عمل ID میں فرق ہے:



  1. چائلڈ پروسیس کی پروسیس آئی ڈی ایک انوکھی پروسیس آئی ڈی ہے جو کہ دیگر تمام موجودہ پروسیس کی آئی ڈی سے مختلف ہے۔
  2. والدین کے عمل کی شناخت بچے کے والدین کے عمل ID کی طرح ہوگی۔

بچوں کے عمل کی خصوصیات

مندرجہ ذیل کچھ خصوصیات ہیں جو بچے کے عمل میں ہیں:





  1. سی پی یو کاؤنٹرز اور وسائل کے استعمال کو صفر پر ری سیٹ کرنے کے لیے شروع کیا گیا ہے۔
  2. جب والدین کا عمل ختم ہو جاتا ہے تو ، بچوں کے عمل کو کوئی سگنل نہیں ملتا کیونکہ PR_SET_PDEATHSIG خصوصیت prctl () میں ری سیٹ ہے۔
  3. فورک () کال کرنے کے لیے استعمال ہونے والا دھاگہ چائلڈ پروسیس بناتا ہے۔ لہذا بچے کے عمل کا پتہ وہی ہوگا جو والدین کا ہے۔
  4. والدین کے عمل کی فائل ڈسریکٹر بچے کے عمل سے وراثت میں ملتی ہے۔ مثال کے طور پر فائل کی آفسیٹ یا جھنڈوں کی حیثیت اور I/O صفات بچے اور والدین کے عمل کے فائل ڈسریکٹروں کے درمیان شیئر کی جائیں گی۔ لہذا پیرنٹ کلاس کا فائل ڈسریکٹر چائلڈ کلاس کے اسی فائل ڈسریکٹر کا حوالہ دے گا۔
  5. والدین کے عمل کے اوپن میسج قطار بیان کرنے والے بچے کے عمل سے وراثت میں ملتے ہیں۔ مثال کے طور پر اگر فائل ڈسریکٹر میں والدین کے عمل میں کوئی پیغام ہوتا ہے تو وہی پیغام بچوں کے عمل کے متعلقہ فائل ڈسریکٹر میں موجود ہوگا۔ لہذا ہم کہہ سکتے ہیں کہ ان فائل ڈسریکٹروں کی پرچم اقدار یکساں ہیں۔
  6. اسی طرح اوپن ڈائریکٹری اسٹریمز بچوں کے عمل سے وراثت میں ملیں گی۔
  7. چائلڈ کلاس کی ڈیفالٹ ٹائمر سلیک ویلیو پیرنٹ کلاس کی موجودہ ٹائمر سلیک ویلیو جیسی ہے۔

پراپرٹیز جو بچے کے عمل سے وراثت میں نہیں ہیں۔

مندرجہ ذیل کچھ خصوصیات ہیں جو بچے کے عمل سے وراثت میں نہیں ہیں۔

  1. یادداشت کے تالے۔
  2. چائلڈ کلاس کا زیر التوا سگنل خالی ہے۔
  3. عمل سے وابستہ ریکارڈ تالے (fcntl ())
  4. غیر سنجیدہ I/O آپریشنز اور I/O مواد۔
  5. ڈائریکٹری میں تبدیلی کی اطلاعات۔
  6. الارم () ، setitimer () جیسے ٹائمر چائلڈ کلاس کو وراثت میں نہیں ملتے۔

فورک () سی میں

فورک () میں کوئی دلیل نہیں ہے اور واپسی کی قسم فورک () عدد ہے۔ جب آپ فورک () استعمال کرتے ہیں تو آپ کو درج ذیل ہیڈر فائلوں کو شامل کرنا ہوگا۔



#شامل کریں
#شامل کریں
#شامل کریں

فورک () کے ساتھ کام کرتے وقت ، قسم کے لیے استعمال کیا جا سکتا ہے۔ pid_t پروسیس ID کے لیے بطور pid_t بیان کیا گیا ہے۔

ہیڈر فائل وہ جگہ ہے جہاں فورک () کی وضاحت کی گئی ہے لہذا آپ کو فورک () استعمال کرنے کے لیے اسے اپنے پروگرام میں شامل کرنا ہوگا۔

واپسی کی قسم کی وضاحت کی گئی ہے اور فورک () کال کی وضاحت کی گئی ہے۔ لہذا ، آپ کو فورک () سسٹم کال استعمال کرنے کے لیے اپنے پروگرام میں دونوں کو شامل کرنے کی ضرورت ہے۔

کانٹے کا نحو ()

لینکس ، اوبنٹو میں فورک () سسٹم کال کا نحو اس طرح ہے:

pid_t کانٹا (باطل)

نحو میں واپسی کی قسم ہے۔ pid_t . جب چائلڈ پروسیس کامیابی کے ساتھ بن جاتا ہے ، والدین کے عمل میں چائلڈ پروسیس کی پی آئی ڈی واپس کر دی جاتی ہے اور 0 بچے کے پروسیس میں ہی واپس کر دیا جاتا ہے۔

اگر کوئی خرابی ہے تو -1 والدین کے عمل کو واپس کر دیا جاتا ہے اور بچے کا عمل نہیں بنایا جاتا ہے۔

No arguments are passed to fork(). 

مثال 1: کال کرنا کانٹا ()

مندرجہ ذیل مثال پر غور کریں جس میں ہم نے ایک نیا بچہ عمل بنانے کے لیے فورک () سسٹم کال کا استعمال کیا ہے۔

کوڈ:

#شامل کریں
#شامل کریں
#شامل کریں

intمرکزی()
{
کانٹا()؛
پرنٹ ایف (فورک () سسٹم کال کا استعمال۔n')؛
واپسی ؛
}

آؤٹ پٹ:

فورک () سسٹم کال کا استعمال۔
فورک () سسٹم کال کا استعمال۔

اس پروگرام میں ، ہم نے فورک () استعمال کیا ہے ، اس سے ایک نیا بچہ عمل پیدا ہوگا۔ جب بچہ کا عمل بن جاتا ہے ، والدین کا عمل اور بچے کا عمل دونوں اگلی ہدایات (اسی پروگرام کاؤنٹر) کی طرف اشارہ کریں گے۔ اس طرح بقیہ ہدایات یا سی بیانات عمل کے اوقات کی کل تعداد پر عملدرآمد ہوں گے ، یعنی 2۔nاوقات ، جہاں n فورک () سسٹم کالز کی تعداد ہے۔

لہذا جب فورک () کال ایک بار اوپر کی طرح استعمال ہوتی ہے (2۔= 2) ہماری پیداوار 2 بار ہوگی۔

یہاں جب فورک () سسٹم کال استعمال کی جائے گی ، اندرونی ڈھانچہ اس طرح نظر آئے گا:

مندرجہ ذیل صورت پر غور کریں جس میں کانٹا () 4 بار استعمال کیا گیا ہے۔

کوڈ:

#شامل کریں
#شامل کریں
#شامل کریں

intمرکزی()
{
کانٹا()؛
کانٹا()؛
کانٹا()؛
کانٹا()؛
پرنٹ ایف ('فورک () سسٹم کال کا استعمال')؛
واپسی ؛
}

آؤٹ پٹ:

Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call Using fork() system call 

اب بنائے گئے عمل کی کل تعداد 2 ہے۔= 16 اور ہم نے اپنے پرنٹ اسٹیٹمنٹ کو 16 بار پھانسی دی ہے۔

مثال 2: ٹیسٹنگ اگر فورک () کامیاب رہا۔

مندرجہ ذیل مثال میں ہم نے فیصلہ سازی کی تعمیر کو فورک () کے ذریعے لوٹی گئی قیمت (انٹ) کو جانچنے کے لیے استعمال کیا ہے۔ اور متعلقہ پیغامات دکھائے جاتے ہیں:

کوڈ:

#شامل کریں
#شامل کریں
#شامل کریں

intمرکزی()
{
pid_t p؛
p=کانٹا()؛
اگر(p== -)
{
پرنٹ ایف ('فورک () پر کال کرتے ہوئے ایک خرابی ہے')؛
}
اگر(p==)
{
پرنٹ ایف ('ہم بچے کے عمل میں ہیں')؛
}
اور
{
پرنٹ ایف ('ہم والدین کے عمل میں ہیں')؛
}
واپسی ؛
}

آؤٹ پٹ:

ہم والدین کے عمل میں ہیں۔
ہم بچے کے عمل میں ہیں۔

مندرجہ بالا مثال میں ہم نے ٹائپ pid_t استعمال کیا ہے جو فورک () کی ریٹرن ویلیو کو محفوظ کرے گا۔ فورک () کو آن لائن کہا جاتا ہے:

p=کانٹا()؛

تو فورک () کے ذریعے لوٹی گئی انٹیجر ویلیو کو p میں محفوظ کیا جاتا ہے اور پھر p کا موازنہ چیک کے ساتھ کیا جاتا ہے کہ آیا ہماری فورک () کال کامیاب تھی۔

جب فورک () کال استعمال کی جاتی ہے اور بچہ کامیابی کے ساتھ بنایا جاتا ہے تو ، بچے کے عمل کی آئی ڈی والدین کے عمل میں واپس آ جائے گی اور 0 بچے کے عمل میں واپس آ جائے گی۔ والدین کے عمل میں بچے کے عمل کی شناخت ایک جیسی نہیں ہوگی بچے کے عمل میں ہی بچے کے عمل کی شناخت۔ بچے کے عمل میں بچے کے عمل کی شناخت 0 ہوگی۔

اس ٹیوٹوریل کے ساتھ آپ دیکھ سکتے ہیں کہ لینکس میں فورک سسٹم کال کے ساتھ کیسے شروع کیا جائے۔