 بسم اللہ الرحمن الرحیم آج ہم موڈیول 88 دسکس کریں گے موڈیول 88 ہے about process creation process creation کیسران سے ہوتی ہے ہم نے پہلے windows کے processes کو دسکس کیا ہے اب اگر آپ نے programatically کسی process کو کرنے تو کیسے کریٹ کریں گے windows کے اندر ہم دیکھ چکیں of course کوئی بھی آپ نے کام کرنا ہے تو اس کے لیے کیا ہوتی ہیں system calls ہوتی ہیں apis ہوتی ہیں تو process کریٹ کرنے کے لیے بھی API ہے وہ کنسی API ہے create process create process کی API use کریں گے جب کبھی بھی آپ کو کسی process کو کریٹ کرنے کی ضرورت پڑے گی پھر جب آپ process کریٹ کرتے ہیں تو ایک process کسی دوسر process کو آگے کریٹ کر سکتا create process کی API ہے اس کو کوئی بھی process call کر سکتا جس process نے اس create process کی API کو call کیا وہ ایک نیا process کریٹ کر رہا ہے وہ جو نیا create ہونے والا process ہے وہ create کرنے والے process کا child کیلائے گا یعنی کہ جس process نے create کیا وہ parent ہے اور جو process create ہوا وہ child process ہے اب windows کی اندر کوئی ایسا internally data structure نہیں ہے جو کہ اس relationship کو اپنے اندر سٹور کرا یعنی کہ windows کے پاس یہ information نہیں ہے کہ کونسر process child ہے اور کونسر process parent ہے parent child کی relationship کی information اس نے کسی data structure کی اندر سٹور نہیں کیوئی بس ہم جو process create کرا اس کو ہم parent کہیں گے اور جس کو create کرا اس کو ہم child کہیں گے create process کی API جو ہے وہ تھوڑی سی company hense کا کافی detail ہے اس کے اندر 10 parameters ہے اور وہ handle return نہیں کرتی ہے بلکہ آپ کو parameters کی اندر کچھ handles ملتے ہیں اور ایک handle جو ہے دو handles ملتے ان fact ایک handle جو ہے وہ thread کا handle ہے اور دوسرا handle جو ہے وہ process کا handle ہے یعنی کہ جب ایک process create ہوگا وہ by default single threaded ہوگا جو ایک thread اگر آپ threads create کرسنا چاہے ہیں تو آپ اس کے اندر create کر سکتے ہیں تو primary thread already ہوگی تو اس primary thread کا handle اور وہ process جس process کے اندر سارہ کچھ ہے اس کا handle یہ دو handles آپ کو create process کی function کے ترو ملیں گے parameters کے ترو پھر جب آپ نے ایک process create کیا اس کو use کیا ultimately آپ نے اس process کو destroy بھی کرنا previously ہم دیکھ چکے ہیں جتنے بھی ہمارے پاس اس طرح کی and the end destroy کرتے ہیں process کو بھی آپ نے اسی طرح destroy کرنا لیکن process کو destroy کرتے وقت آپ کو بہت کرفل ہونا چاہیے آپ کو دونوں چیزوں کو destroy کرنا بڑے گا thread کو بھی primary thread کو بھی اور process کو بھی process کو بھی destroy کرنا and primary thread کو بھی destroy کرنا جب آپ primary thread کو destroy کرتے ہیں تو in fact thread destroy نہیں ہوتا اس کا reference within the process وہ delete ہوئے ہوتا تو آپ کو بہت کرفلی دونوں چیزوں کا خیال رکھنا اور صحیح طریقے سے دونوں کو آپ نے destroy کرنا primary thread کو بھی destroy کرنا اور process کو بھی یہ وہ API ہے create process کی جس کو کہ ہم use کریں گے process create کرنے کے لیے اس کے اندر آپ دیکھ ستے ہیں اس کی return type جو ہے bool ہے کہ یہ کوئی handle return نہیں کرا پھر اس کے اندر آپ کے پاس 10 parameters ہیں long pointer to application name پھر a long pointer to command line پھر a long pointer to process attributes اور مختلف اس طرح سے اور parameters ہم ان parameters تو تھوڑا تھوڑا دیسکس کرتے ہیں پہلے پرامیٹرہ lp application name اور دوسرا lp command line یہ آپ کے image کا نام سپیسفائے کرنے کے لیے use ہوتا ہے جسہاں ہم نے previously دیسکس کیا کہ آپ کو جو image ہے یعنی کہ جو آپ کی ڈی فائل ہے وہ بسکلی ایک program ہے اس کے اندر code پڑی بھی ہے اور وہ جو code ہے وہ ابھی passive form کی اندر ہے وہ اپنے آپ کو execute نہیں کر سکتی کب تک execute نہیں کر سکتی جب تک کہ وہ memory میں نہیں آتی memory میں کیسے آئے گی اگر وہ process بنے گی process آپ کیسے بنا رہے ہیں create process کی مدد سے تو آپ نے یہاں پہ image کا نام سپیسفائے کرنے اس کو کیسے سپیسفائے کریں گے اس کو آگے چلکے ہم ان detail دیکھیں گے یا تو lp application name پیرمیٹر use ہوگا یا lp command line کا پیرمیٹر use ہوگا ان دونوں پیرمیٹر کو use کرتے ہوئے image کا نام سپیسفائے کر سکتے ہیں اچھا پھر next جو پیرمیٹر ہے that is lp process attribute اور lp thread attribute اس کے اندر security attribute سونگے آپ کے جو process create ہو رہا ہے اور جو thread create ہونے جا رہا ہے ان دونوں کے security attribute سونگے یہ security attribute کا جو structure ہے اس کے اندر in attributes کو پلیس کریں گے اور پھر یہ pointer بناکے آپ اس کو pass کریں گے to this function پھر ایک Boolean value ہے be inherit handles یہ پیرمیٹر بتا رہا ہے کہ جو parent کے handles ہیں ان کو یہ جو child بننے جا رہا ہے inherit کرے گا یا نہیں کرے گا اگر آپ ایک child بنانے جا رہے ہیں تو child parent کے handles inherit کرے گا یا نہیں کرے گا یا be inherit handles کے اندر سپیسفائے کریں گے DW creation flag اس کے اندر آپ مختلف flags کو کمبائن کر سکتے ہیں جو بھی جس طرح سے بھی آپ process کو کریٹ کرنا چاہ رہے ہیں اس کے accordingly اگر for example آپ ادر سپیسفائے کرتے ہیں create suspended اس کا مطلب ہے جو thread create ہوگی وہ suspended ہوگی وہ execution نہیں کری ہوگی اور اس کی execution اگر آپ نے resume کروانی ہے تو resume thread کا method call کریں گے function call کریں گے اور اس کو resume کروا سکتے ہیں پھر آپ کے بس دو option ہے اور یہ mutually exclusive ہے ان دونوں میں سے کوئی ایک option آپ use کریں گے detached process یا create new console detached process کا مطلب ہے کہ ایسا process جس کی console نہیں ہوگی اور create new console کا مطلب ہے console والا process جو process نیا create ہوگا اس کی console ہوگی تو یا تو آپ detached process use کر سکتے ہیں یا create new console use کر سکتے ہیں دونوں at a time آپ use نہیں کر سکتے ہیں اگر unicode use ہونی ہے آپ کے process کے اندر تو آپ create unicode environment کا یہاں پر switch use کر سکتے ہیں ایک اگر آپ نے new process گروپ بنانا ہے تو اس case میں آپ create new process گروپ کی option use کریں گے اگر آپ ایک گروپ بناتے ہیں گروپ of processes اس طرح سے create کرتے ہیں child processes تو پورے کا پورا جو گروپ ہے جتنے بھی control signals جس طرح کہ control c ہے control break ہے اس طرح کہ جتنے بھی control والے signals ہیں وہ سارے processes جو اس گروپ کی اندر وہ کتھے اس کو رسیف کرتے ہیں جو control signals وہ سارے processes کو رسیف ہوگا پھر lp environment اس کے اندر environment block کا address ہوگا اس کے اندر آپ جو بھی کے program کا environment block ہے جس program کو create کریں اس کا environment block ہے اس کا آپ address سپیسفائی کریں گے اگر اس کو نال راکھتے ہیں تو جو parent block parent process کا environment block ہے وہ ہی use ہو جائے گا پھر اس طرح سے long pointer to current directory جو اس کے اندر current directory اس کی آپ رکھنا چاہ رہے ہیں اس process کی اس کا آپ address سپیسفائی کریں گے یعنی کہ current directory ایک string کے اندر ایک string کے address سپیسفائی کریں گے اگر نال رکھتے ہیں تو جو parent کی working directory ہے وہ ہی use ہوگی start up information lp start up یہ بھی again long pointer ہے اس کے اندر windows کی appearance سے relevant یعنی کہ جو آپ standard input output strings use کریں ان کی information ہوگی اور lp proc information اس کے اندر جو یہ ایک basically structure ہوگا اور اس structure کے اندر جو آپ کا process ہے اور جو آپ کی thread ہے اس کے handles کی information پڑی ہوگی lp current directory کے اندر آپ سپیسفائی کریں گے drive جو کہ آپ اس کی working directory بنانا چاہتے ہیں اس کا drive اور اس کی directory پورا پات آپ سپیسفائی کریں گے اگر نال رکھتے ہیں تو اس صورت کے اندر جو parent کی working directory وہ use ہوگی lp start up اندر آپ جو windows کی basic appearance اس کی بارے میں information ہو ستی ہے یعنی کہ اپنے دوائیسز ہیں جو کہ ان پڑا اوپٹکلی use ہونے nay program نے جو use کرنے وہ آپ سپیسفائی کریں گے اور سب سے importantly process information process information وہ structure ہے جس کے اندر handles اور ڈی پڑے ہوں گے جو process کریئٹ ہوئا ہے اور جو سات اس کے اندر primary thread کریئٹ ہوئی ہے ان دونوں کے handles اور ان دونوں کے ڈیز آپ کو اس structure میں سے ملیں گے یہ اس structure کا long pointer ہوگا pointer to process information process information کے اندر یہ دونوں handles placed