 بسم اللہ الرحمن الرحیم آج ہم موڈیول 98 دیسکس کریں گے موڈیول 98 ایک اگزامپل ہے اس اگزامپل کے اندر ہم یہی پیرنٹ چائل پروسیس کا کریئٹ کرنا اور اس کو use کرنا اپتیمل کریکے سے اسی چیز کی ایک اگزامپل ہے اس سے پہلے ہم نے دیکھا تھا کہ ہم نے مختلف اپریشنز پروفارم کیا تھے ہم نے یہ کیا تھا کہ ایک پیرنٹ پروسیس تھا اس نے child process کو کریئٹ کیا پھر ہم نے دیکھا کہ ہم inheritable handles کیس طرح سے بنا سکتے ہیں handles کو duplicate کیسے کر سکتے ہیں تاکہ جو resources پیرنٹ کو available ہیں انی resources کو child تک منچانے کے لیے ہمیں inheritable handles کی ضرورت پڑتی ہے یا duplicate handles کی ضرورت پڑتی ہے تو یہ operations ہم کیسے پروفارم کر سکتے ہیں اب ان ساری چیزوں کو use کر کے ہم ایک useful application میں آئے گے یہ useful application جو ہے یہ windows multi-tasking کی power کو بھی use کرے گی یعنی کہ ہم ایک operation اس کے اندر پروفارم کریں گے جو multi-tasking کی مدر سے بہت optimally اور بہت fast پروفارم کر سکے گا اس میں ہم یہ کرنے کہ ہمارے پاس مختلف files ہیں اور ہم نے ہر file میں سے ایک pattern سرچ کرنا ہے ایک specific pattern ہے اور وہ کئی ساری file میں وہ سکتا ہے سو files ہوں، دوسو files ہوں، بیشمار files ہوں کئی ساری files ہیں اور اس کے اندر ہم نے ایک specific pattern سرچ کرنا ہے تو یہ program جو ہے multi-tasking کی power کو use کرتے ہوئے ہر file کے لیے ایک process run کر دے گا جتنی آپ نے file specify کیا ہے اس file کے لیے ہر file کے لیے ایک process run کر دے گا ایک process ہوگا جو کہ اس pattern کو سرچ کر رہا ہے لیکن اس کی کئی copies جو ہے وہ at a time run ہو رہے ہیں ہر file کے لیے ایک copy start کر دے گا اور وہ concurrently کام کریں گی اور اس کی وجہ سے ہوسکتا ہے کہ ایک optimal manner کی اندر آپ اس pattern کو سرچ کر سکیں among number of files بجائے اس کے کے loop میں لگا کے باری باری ہر file کے لیے آپ سرچ کریں اس کے اندر جو standard output file ہے اس کو ہم inheritable بنا دیں گے تاکہ جو child process ہے وہ be standard output and device جو ہے اس کو use کر سکے standard output file کو use کر سکے اور جو یہ information ہے وہ کسک پاس کی جائے گی child کو وہ pass کی جائے گی through startup info structure جس طرح ہم نے previously دیکھا تھا پھر کیونکہ number of processes ہم نے run کر دی ہے at a time own processes کو ہمیں synchronize بھی کرنا پڑے گا ہمیں دیکھنا پڑے گا کہ وہ processes کب end ہوتے ہیں اور جب سارے processes end ہوتے ہیں تو ہم تب تک ویٹ کریں گے جو ہی سارے processes end ہوتے ہیں ہم پھر ان کا results جو ہے اس کو display کر سکتے ہیں تو synchronization کی لیے ہم پھر weight functions کا استعمال کریں گے پھر weight function کرنے کی بھی limitation ہے کہ weight جو اگر multiple اگر ہم کر رہے ہیں تو اس کس کے اندر آپ کے پاس ایک limit ہے کہ 64 handles تک کے لیے ایک وقت میں ایک weight call use ہو سکتی ہے اگر 64 handles سے اگر 64 سے زادہ آپ کے پاس files ہیں تو آپ کو multiple weight والی جو call ہے وہ بھی multiple times perform کرنے پڑے گے اگر sayf 128 files ہیں تو آپ کو دو weight multiple calls کرنے پڑھیں گے اور اسی طرح سے اگر آپ کے پاس 128 ہے تو دو دفعہ call کرنے پڑھے گے اگر 256 ہیں آپ کو 4 times call کرنے پڑھے گے تو اس کے لیے بھی ہم نے ایک logic بنا لیا کہ اس logic سے جتنی بھی ہمارے پاس files ہیں اس کے according نہیں پھر ہم weight بھی call کریں گے for multiple objects اور جب بھی ایک program exit ہوتا ہے ایک program کو آپ نے criteria specify کیا اس کو ایک file دے دیا اب وہ جو process run ہو رہا ہے وہ اس criteria کو اس file کے اندر سرچ کر رہا ہے اور in the end ہو سکتا ہے اس کو وہ pattern ملتا ہے ہو سکتا ہے نہ ملے اگر ملتا ہے تو وہ ایک certain specific code return کریں گا جسے اس پڑا چل جائے گا کہ اس process کو یہ pattern اس file کے اندر مل گیا تو یہ جو results ہمیں یہ detect کر کے کہ جی کس process کو ملے ہمیں کیسے پتہ چلے گا اس کی exit code سے پتہ لگے گا exit code سے ہم identification کریں گے کہ جی اس file کے اندر یہ pattern مل گیا اور پھر یہ results جو ہم screen کے اوپر display کرنا چاہیں گے کہ کس کس file کے اندر ہمیں match ملے اس example کا flow آپ اس diagram کی مدل سے سمجھ سکتے ہیں اس کے اندر اس process کو multiple arguments pass ہو رہے کمان لائن کے اوپر جو آپ کمان لائن سپیسفائے کریں گے آپ کمان لائن کے اوپر اس program کا name سپیسفائے کریں گے آپ pattern سپیسفائے کریں گے pattern سپیسفائے کریں گے اور ساتھ ہی آپ file name سپیسفائے کریں گے file 1, file 2, file 3 and so on out of file n n کتنا ہی بڑا کیونہوں تو اس سے کیا ہوگا multiple arguments pass ہوں گے n argument 0 جو ہے that is the file name argument 1 جو ہے وہ pattern ہو جائے گا اور باقی n arguments ہیں that is the file names n files جو آپ کی n file اس نے n arguments کو process کرنا یہ کیا کرے گا کہ ہرے کے لیے create process کرے گا اور یہ grep کا process ہے یہ grep کا process جو ہے یہ ہمارے لیے آپ سمجھیں کہ ایک طرح کا black box ہے یہ آپ کچھ بھی بنا سکتے ہیں یعنی کہ اس نے کیا کرنا ہے اس کی نئے file کے اندر اس pattern کو search کرنا ہے تو اس کا کچھ بھی آپ logic بنا سکتے ہیں sorting searching آپ کو algorithm اس پتا ہے تو یہ ہمارے پاس بس ایک process ہے جو ایک وقت میں ایک file کے اندر ایک pattern کو آپ کو search کرکے دیتا ہے لیکن اس کو multi-tasking طریقے سے use کر کے ہم ایک extension بنا آکے اسی ایک program کو use کرتے ہوئے ہم numerous files کے لیے یہ کام کر سکتے ہیں کہ numerous file کے اندر اس pattern کو ہم concurrently search کر سکتے ہیں یہاں میں ہم نے ایک loop چلایا یہ loop end times چلے گا اور ہر loop کے اندر start-up information کے اندر std out کا handle std out کا handle pass کیا جا رہا اور ہم کیا کریں؟ ایک file کریٹ کر دیں گے temporary file کریٹ کر دیتے ہیں اور ساتھی ساتھ ہم ایک create process کر دیتے ہیں process کو create کر دیتے ہیں temporary file جو کریٹ کیا اس کے اندر ہم اپنے results کو place کریں گے اور جو ہم نے create process کیا اس کو ہم نے اس جو ہم نے ایک program بنایا ہوا اس program کے سات اس program کا ایک process ران کر دیں گے اس process کو ہم pattern pass کریں گے اور ایک کوئی argument pass کر دیں گے اس loop کو کتنی دفعہ چلانا پڑھے گا جتنی آپ کے پاس files ہیں اگر end files ہیں loop end times چلے گا end processes ران ہوں گے grab کا جو process ہے یہ end times run ہوگا for each file پہلی دفعہ run ہوگا تو file one اس کو pass ہوگی اور ساتھ وہی pattern pass ہوگا دوسی دفعہ run ہوگا file two pass ہوگی اور وہی pattern ہوگا اس طرح ایک loop کی اندر ساری files جو ہے ہر file کے لیے ایک process create ہوگا اب یہ multiple processes run ہوگا multiple grab کے processes یہ grab run ہوگا for file one پھر اسی طرح سے ایک اور grab run ہوگا for file two پھر اسی طرح سے multiple grab processes run ہوگا تمام files کے لیے اور کسی کے اندر pattern مل جائے گا کسی کے اندر pattern نہیں ملے گا پھر ہم کیا کریں گے ہم تمام processes کے complete ہونے کا wait کریں گے یہ کہ یہاں پہ ہم wait کریں یہ multiple object کیلئے wait کریں اگر object 64 سے زادیں تو اس کی calls بھی ہم multiple کر سکتے ہیں پہلے 64 کیلئے call کریں اگلے 64 کیلئے call کریں اگلے 64 کیلئے call کریں اس طرح جب تک ساری files جو ہے اس طرح سے use نہیں ہو جاتے ہیں پھر in the end ہم ایک اور loop کے اندر جائیں گے اور ہم یہ دیکھیں گے کہ کس process نے کیا code return کیا for example اس کو pattern مل جاتا ہے یہ code return کرتا ہے one اس کو نہیں pattern ملتا ہے یہ zero return کرتا ہے یہ one return کرتا ہے جس جسے one return ہوا اس کا نام جو ہے یا اس کی file جو ہے وہ ہم temporary file کے اندر در پلس کرتے جائیں گے اور اس temporary file کو ہم concatenate کر دیں گے یہاں پہ ایک اور process run ہوا جس کے اندر تمام temporary files کو ہم concatenate کر دیں گے یہ cat کا ایک اور process ہے جو کہ concatenation کیلئے اور یہ اس پوری string کو concatenate کر رہا ہے concatenate کر کے جب تک یہ process complete نہیں ہو جاتا ہے یہاں پہ ہم wait کرتے رہیں گے جو ہی process complete ہوتا ہے ہم process کو exit کریں گے اور اس کا result جو ہے اس کو display کیا جا سکے آئے اس پوگرام کی طرف چلتے ہیں اس پوگرام کو argument pass ہوئے argument count pass ہوئا argument v pass ہوئا جتنے بھی arguments ہیں وہ سارے pass ہوئے یہاں پہ ہم نے اپنا ایک security attribute کا structure بنا لیا ہے اور یہ different startup کیلئے ہم نے started info رکھنے کیلئے بھی ایک structure define کر لیا process information رکھنے کیلئے بھی ایک process info کا structure define کر لیا پھر ایک handles کی ہم نے array بنا لیا handles کی array بنا لیا اس کے اندر ہم اپنے process handles کو store کریں گے تاکہ wait کو use کیا جا سکے اس کے بعد ہم یہ جو raise ہیں ان کے لیے memory allocate کرتے ہیں ایک process file کیلئے اور ایک process handle کیلئے process file جو ہے ہم use کریں for temporary files this is array of temporary files کیلئے ہم use کریں اور یہ جو h proc this is array of processes ہم اس کو as a process کی array بنا رہے ہیں process handles process handles اس کے اندر ہم store کریں گے ہمارے پاس دو arrays اس طرح سے populate ہوں گے اور کتنی arrays بنانی بڑھیں گے جتنے ہمارے پاس file ہیں تو یہاں پہ آپ دیکھ سکتے ہیں کہ ہم نے کتنا سیز allocate کیا جو argument count ہے اس میں سے 2 minus کر لیا 2 کیوں minus کیا کیونکہ شروع میں پہلہ argument that is grep اور دوسرا argument is pattern اور اس کے بعد files ہیں تو total count کیا آئے گا this n number of files plus 2 آئے گا تو یہ 2 ہم نے اس میں سے minus کر لیا تو اتنی ہمیں temporary files چاہیے ہیں اتنی بڑی ہمیں ایک array چاہیے ہے جو کہ تمام processes کے handles کو store کرے گی اب ہم ایک loop جلاتے ہیں argument count minus 2 تک اس loop کے اندر ہم ایک temporary file کرتے ہیں ایک handle جو ہے وہ یہاں پے store کر لیتے ہیں create کیا اس کو اور اس کے اندر ہم نے اس کو handle کو store کر لیا generic read اور generic write ہم file کو create کرے ہیں in case of error error report ہو جائے گا اور پھر ہم نے process create کرنے سے پہلے flags کی value سیٹ کر دی اور 7 std output specify کر دیا start-up information کے اندر std error std input ان کے handles get کر کے ہم نے start-up information کے اندر سیٹ کر دیا اب ہم اس کی مدہ سے جو process جہاں اس کو set-up کر سکتے ہیں جب process کو ہم create کریں گے تو اس کے اندر آپ یہاں process info اور process search specify کر رہے ہیں اگر process سیتری کیسے create ہو جاتا ہے تو process info کے اندر اس کے handles آجیں گے اُن handles کو ہم ہم یہاں پے ہرے کے اندر store کریں تو جتنے بھی process create ہون گے ہرے کا handle اس ارے کے اندر store ہوتے دے گا ان case کہ 64 سے maximum weight object سے زادہ objects ہیں تو یہ ہم weight والا function جو ہے اس کو multiple times call کریں اگر اس سے کم ہے تو just once آپ کو call کرنا پڑے گا تمام objects کیا پھر اسی طرح اب یہاں پے یہ function blocked رہ گا جب تک process return نہیں ہونا شروع ہو جاتے جب سارے process return کریں گے یہاں سے execution جو ہے یہاں پے کیونکہ ہم نے true رکھا ہوا ہے all کے لیے تو سارے کے سارے process return کریں گے اور infinite weight سارے کے سارے process return کریں گے تو پھری یہاں سے weight ختم ہوگا air execution آگے جائے گی execution ہے اس کے اندر ہم کیا کریں ہر process کا جو exit code ہے وہ get کریں get exit code process ہے اس کو process کا آپ نے handle specify کیا اور جو exit code ہے وہ exit code کے اندر آگی اور پھر اس exit code کو ہم دیکھ رہے ہیں کہ اس کے اندر ہمیں اگر ان case ان case ہمیں اس کے اندر pattern ملا تو ہم اس کی temporary file کو جو ہے وہ concatenate کریں اس string کے اندر concatenate کریں temporary file کو concatenate کریں گے اور اس کے بعد یہ process run کریں گے یعنی کہ یہ جو ہم نے this string بنائیے command line بنائیے یہ command line کیا cat یہ process ہوگا جو کیا کرے گا کہ اس string اس string کے اندر یہ concatenation perform کرے گا تو یہ process چلتا رہے گا یہاں پر process کو ہم نے create کیا اور آپ اس process کی اب یہاں پر complete ہونے کا wait کریں in finite جب تک یہ process complete نہیں ہو جاتا جب سارے جہاں جنجن کا اس کو code ملائے کہ جی انہوں نے pattern بیچ میں سے سرچ کر لیا تھا pattern مل گیا تھا اور اگر pattern مل گیا تھا تو آپ نے کیا کیا اس کو concatenate کر دیا اس کی temporary files کو concatenate کر دیا تو آپ کے پاس اندر end A کی string کے اندر سارے results جویں وہ available ہو جائیں گے جب آپ جب آپ کا اس ویٹ سے باہر نکلیں گے تو A کی string کے اندر سب کچھ آپ کے پاس available ہو گا اور اس کے بعد آپ یہ جو handles process کا اور thread کا اس کو close کر سکتے ہیں اب آپ مزید آپ کو in process کیا اور thread کی ضرورت نہیں ہے اور temporary files کو بھی آپ delete کر دیں جو یہ array create کی تھی اس کو بھی آپ delete کر دیں اور سارے جتنے بھی handles آپ نے create کیا تھے ان کو آپ delete کر دیں اس طرح سے آپ کے پاس ساری جو concordination کی information ہے وہ ایک string کے اندر available ہو جائیں گے