 اسم اللہ الرحمن الرحیم آج ہم موڈیول 103 دسکس کریں گے یہ موڈیول ہے about job management shell اس کے اندر ہم ایک shell کریں گے ایک program کریں گے جو کہ jobs کو مانج کرنے کے لیے استعمال ہوگا عام طور پہ operating systems جو ہیں وہ مختلف کسم کو شلز کو استعمال کرتے ہیں شل کا مقصد یہ ہوتا ہے کہ آپ جو jobs ہیں ان کو کریٹ کر سکتے ہیں اس کے اندر دسٹوائے کر سکتے ہیں jobs کو کنٹرول کرنے کے لیے شل استعمال ہوتا تو یہ ایک سمپل سے شل ہے اس کے اندر ہم تین کمانٹز جو ہے وہ بنار ہیں ایک کمانٹ ہے job bg دوسری کمانٹ ہے job s اور تیسری جو ہے وہ کل ہے job bg جو ہے وہ job begin کے لیے وہ use ہوری ہے ایک job کو کریٹ کرنے کے لیے job s جو ہے وہ job کو display کرنے کے لیے جو جو jobs اس وقت run ہوری ہیں ان کو display کرنے کے لیے اور kill جو ہے وہ کسی ایک SPECIFIC job کو دسٹوائے کرنے کے لیے use ہوگی اب یہ کس طرح سے شل work کرے گا اس کو آپ کمانٹ لائن کے اوپر سپیسفائے کریں گے کہ جی آپ نے یہ operation perform کرنے جو کوئی بھی operation ہوگا اس کے جو پیرامیٹرز ہوں گے ان کو وہ parse کرے گا اور parse کر کے وہ decided کرے گا کہ اس نے کونسہ operation perform کرنے job begin والا کرنے job کو display کرنے یا کسی job کو kill کرنے job اس کو option SPECIFY کریں گے اور once وہ یہ determine کرلتا تو اس کے لیے according لی جو بھی اس نے functions بنائے ہوں گے یا جو بھی logic ہوگا اس logic کو وہ call کرے گا تو شایلہ عم طور پر یہ ہی کرتا اس کے لئے کچھ options ہوتی ہیں آپ ان options کو جو ہے وہ invoke کرتے ہیں ایسا کرنے کے لیے ایک یہ والا جو شایل ہے یہ ایک file create کہا رہا اس file کے اندر jobs جو بھی run ہو رہی ہیں ان سے relevant information پڑی ہوئی ہے اب کیونکہ ایک وقت میں شایل بھی concurrent لی run ہو سکتی ذوڑی نہیں کہ ایک شایل run ہو رہی ہے تو اس وقت بھی دوسی شایل نہیں run ہو سکتی اسی کے ایک اور copy run ہو سکتی اس کی کئی copies run ہو سکتی ہیں یا ہوسکتے شایل run ہو رہا ہے اس کو آپ close کر دیتے ہیں اور تھوڑی دے بعد پھر سے آپ اس شایل کو run کرتے ہیں اس کی مدہ سے اور کوئی process جو اس کو run کرتے ہیں یا process اس کا status دیکھتے ہیں تو یہ جو processes جو آپ نے run کیا job جو آپ نے run کیا ان کا status ایک file کے اندر store کیا جائے گا تو file کیونکہ number of shells بھی ہو سکتی ہیں تو file جو ہے وہ concurrently بھی use ہو گی یہاں پہ کنکرنسی بھی ہمیں کنٹرول کرنی پڑے گی جو گا number of shells run ہو رہی ہیں تو لیکن file ایک ہی ہے جس کے لئے تمام jobs کی information پڑی ہوئی ہے تو سارے جو shell کے processes ہیں بالکل ایک جیسے بھی شاہی وہ processes ہے وہ at different times اس ایک file کو access کرنے کی کوشش کریں گے تو وہاں پہ ہمیں کنکرنسی کنٹرول کرنا پڑے گا تو اس کے لیے file locking کا استعمال کیا گیا file locking کی مدہ سے file کی جو access ہے اس کو mutually exclusive رکھا ہوا اس کوڑ کو دیکھتے ہیں یہ جو main ہے main کے اندر ہم دیکھتے ہیں کہ یہاں پہلی windows version چیک ہو رہا ہے windows version چیک ہو رہا ہے یہ اگر کوئی اور version ملتا ہے nt یا hire کے علاوہ تو اس کے اس میں آپ کو error display ہو جائے گا اس کے علاوہ یہ اور بھی کچھ checks perform ہو رہے ہیں یہاں پہ process limit جو ہے وہ specified اس argument کے اندر first argument کے اندر یہ process limit کو چیک کر رہا ہے جو بھی آپ نے process limit specify کی بھی ہے اگر وہ سیکسیڈ ہوتی ہے تو اس صورت میں بھی یہ program جو ہے terminate کرتے گا اب یہاں پہ یہ کیا کر رہا ہے یہاں پہ یہ ایک job object بنا جو اپ جیٹ کیا چیز ہے یہ ہم آگے چاہے دسکس کریں گے جو بھی آپ ایک job object کے اندر آپ number of jobs جویں وہ associate کر سکتے ہیں اور جب آپ نے job object بنائے تو آپ یہاں پہ دیکھیں کہ اس کی set information job object یہاں پہ ایک اور API use ہو رہی ہے یہ بھی job object کے اندر information set کرنے کے لیے استعمال ہو رہی ہے یہ job object بناتی ہے اور جو بھی اب job create ہو گا وہ اس job object کے ساتھ associate کر لیے جائے گا ایسا کیوں کیوں کیا جائے گا اس کی وجہ آپ کو آگے جاکے پدہ لکتی ہے اب یہاں پہ جو ہم arguments ہے ان arguments کو لیتے ہیں اور اس کو upper case lower case ایک اسی format پہ convert کر کے ہم دیکھ رہے ہیں کہ جو command line سے ہمیں command آئی ہے وہ کیا آئی ہے ہمارے ہم نے یہاں پہ تین options رکیم ہی ہے ایک job begin کے لیے ایک jobs ہے اور ایک kill ہے ان تینوں میسے کوئی ایک option ہے تو اس کے according the action پر پر فام کیا جائے گا اگر job begin ہے تو اس کے لیے job bg کا ایک function ہے وہ call ہوتا ہے اگر jobs ہے تو اس case میں jobs کا function ہے وہ call ہوتا ہے اگر kill ہے تو اس case میں kill کا function ہے وہ call ہوتا ہے اور ہر case کے اندر جو ہمارے command line parameters ہیں وہ اس کو pass کر دیے جاتے ہیں اور یہ پھر ان کو use کر کے اپنے logic کے اندر استعمال کرے گا function اس کے لوہاگر کو command آتے تو یہ آپ کو message دے دیکھا illegal command اب دیکھتے ہیں کہ ہمارا جو job begin کا function ہے job begin کا function کیسے کام کر رہا job begin کا function ہے وہ کیا کرے گا وہ ایک job create کرے گا آپ نے job name specify کیا اس نام کا job اس کو create کرے گا یہ دیکھیں یہاں پر start up structure ہے جو ہم نے پہلے use کیا تھا start up information place کرنے کے لیے process info کے لیے یہاں پر ہم نے ایک structure بنائے گا اور پھر یہ ہم نے start up کے اندر get start up info place کر دی اور options میں سے ہم نے باقی information اٹھائی ہے اور ایسا کرنے کے بعد ہم create flag بنا رہے یہ ہم کہہیں کہ new console نے console کا بنائیں گے یا detached بنائیں گے یہ ڈپنٹ کرہا ہے flag 0 کی value کیا پر اگر flag 0 کی value true ہے تو اس کیس میں new console بنے گی اگر false ہے تو اس کیس میں flag 1 چیک ہوتا ہے اگر flag 1 true ہے تو اس کیس میں detached process بنے گا اور کچھ بھی نہیں ہے تو اس کیس میں zero by default جو بھی value ہوتی ہے اسی طرح کا job create ہوں تو یہاں پر create process کی مدہ سے جو باقی ہمارے create flags تھے ان کو use کرتے ہوئے initially suspended process جو ہے اور process کو اسی group میں رکھتے ہوئے آپ نے ایک process create کر لیا اور اس process کو sign کر دیا تو job object ایک job object کے اندر آپ کئی processes کو associate کر سکتے ہیں تو this is a sign process to job object کی مدہ سے آپ نے job object بنائے تھا اس کے اندر ایک یہ والا جو process ہے وہ associate کر دیا ان case کسی کسم کا error آ جاتا ہے تو آپ process terminate کر دیتے ہیں اور handle close کر دیتے ہیں جو جو handle آپ نے open کیا تھے ان کو close کر دیتے ہیں تو یہ سمپلی ہوگیا job begin آپ نے سمپلی کیا کیا ہے parameters لیے اور parameters لیے کے بعد جو بھی آپ کا process تھا اس process کو create کیا according to the parameters اور پھر اس process کو آپ نے ایک job object کے ساتھ associate کر دیا جو بھی آپ process بنائیں گے اس کو job object کے ساتھ associate کر دیا اس کے بعد اگر process جو ہے وہ صحیطری کیسے create ہو جاتا ہے تو ہم اس کا job number لیں گے یہ job number یہ اس کا اپنا logic ہے اس job number کیسے آئے گا اس کے لیے یہ program اپنہ ایک data structure create کر رہا ہے اور اس نے جو جو jobs create کیا ہے جو جو processes create کیا ہے ان کی information جو ہے وہ اس number کے اندر ایک data structure کے اندر place کر رہا ہے اور اس data structure سے یہ job number آ رہا ہے یہاں سے اس کا job number لیا اس نے اور کیونکہ پہلے suspended process تھا اب اس نے اس کو resume کر دیا اور اگر job number جو ہے وہ ایک certain range سے exceed کر رہا تو اس case میں وہ یہ process کو terminate کر دے گا اور handles جو ہے ان کو close کر دے گا اب اسی طرح سے jobs کی option بھی ہے jobs کی option کی case میں یہ jobs کا function جو ہے یہ invoke ہوتا ہے یہ function جو ہے یہاں پہاں again query information job object کو use کر رہا ہے اس کو use کرتے ہوئے وہ job object میں سے اس job کے بارے میں certain information collect کر رہا ہے پھر جو آپ کے پاس data structure اس نے بنایا ہوا display jobs یہاں پہاں ایک function وہ use کر رہا ہے display jobs اس کی detail ہم آگے چل کے دیکھتے ہیں یہ display jobs جو ہے جو data structure بنا ہوا جس کے اندر اس program نے her job کی information store کیا وہاں سے ایک structure ہوگا اس کے اندر جب بھی ایک job بنتا ہے تو وہ ایک structure ہماری file کے اندر جاکے store ہو جاتا ہے ہر job کے لیے کہنے کہ یہاں پہاں job one ہے job two ہے job three ہے جو جو job create ہو رہا ہے اس کے اندر وہاں جاکے structure کے اندر information آجاتی ہے اور پھر اگر یہ job finish ہو جاتی ہے تو یہاں پڑی ہی information یہ بتا جاتی ہے کہ یہ job جو ہے inactive اور file کے اندر یہ information store ہو رہی ہے display jobs جو ہے وہ سمپلی ہی کرتا ہے کہ اس file سے data read کرتا ہے اور ان کے اندر جو پڑی بھی information ہے اس کو display کرتا چلا جائے گا اب tc option کے پوپر آتے ہیں tc option جو ہے وہ kill کی option ہے kill کی option کیا کرے گا سمپلی process کو terminate کرتے گی وہ job number لے گی job number لے گی اس نے as parameter job number لی گا اس کو دھنڈے گی ہمارے data structure کے اندر جو اب یہاں بھی ہم نے data structure define کیا ہے file کے اندر اس کے اندر اس job کو دھنڈے گی اگر وہ job مل جاتا ہے تو اس process کو terminate کر دے گی process terminate ہو جائے گا اس کی execution وہاں پر تتمہ جائے گی اب یہاں پہ اگر اس نے اپنے garbage collection کرنی یا cleanup کرنے اس نے یہاں پر control event send کیا control event send کیا terminate کرنے سے پہلے جب اس نے process کو open کیا open کرنے دے وقتی ہے بتایا ہے کہ اس کے پاس terminate کے rights ہے اور پھر اس نے پہلے console event send کیا control break کیا یا control c کیا جو بھی اس نے event رکھا ہوگا جو بھی اس کے لیے حنڈلر ہوگا اس کے اندر اور جب تک کہ یہ process return نہیں کرتا ہے یہاں پر wait for single object اس نے رکھا ہوگا جب تک یہ والا process return نہیں کرتا ہے یہ process complete نہیں ہو جاتا ہے یہ process کا پر complete ہوگا جو اس نے garbage collection کرنی تھی جب وہ garbage collection کر لے گا process complete ہو جائے گا اور پھر process terminate ہو جائے گا تو یہاں پر اس process کی completion ہوگی جو ہی process completion ہوگی یہ اس کی blocking ختم ہو جائے گی اس wait کی function کی blocking ختم ہو جائے گی اور ادھا سے onwards execution جو ہے وہ continue کر سکتی ہے تو اس طرح سے آپ دیکھ سکتے ہیں کہ یہ والا جو ہمارا شیل والا جو process ہے یہ شیل ہے یہ اس نے a child process بنایا اور اس کے ساتھ communicate کر رہا ہے اس کو کیا کر رہا ہے اس کو پہلے control c کا signal send کرتا ہے control c کا اس کے اندر لگا ہے وہ hender جو ہے ساری garbage collection کرتا ہے garbage collection کرنے کے بعد یہ process پھر اس کو terminate کرتا ہے تو یہ کوڑ کے اندر آپ کو ایک زمپل نظر آ رہی ہے اس mechanism