حل مشکل قفل شدن Windows Explorer در ویندوز سون
يكشنبه, ۱۰ فروردين ۱۳۹۳، ۰۱:۰۷ ب.ظ
آیا شده تا به حال در ویندوز، یکی از پنجرههای Windows Explorer قفل کند و یک دفعه همه پنجرهها بسته شود؟ دوست دارید از این معضل جلوگیری کنید؟
یکی از زیرشاخههای این مبحث، بحث انشعاب پردازهها (یا همان چنگال: Fork) است.
در این بخش گفته میشود که ممکن است یک پردازه به دلایل مختلف، پردازههای دیگری را ایجاد یا فراخوانی کند که به پردازه اول، پدر یا والد (Parent) و به بقیه پردازهها، فرزند (Child) گفته میشود.
حالا موضوع این است که اگر پردازه پدر با مشکل مواجه شد، ما چه رفتاری با فرزندها داشته باشیم؟ و همینطور، برعکس. یعنی اگر فرزند با مشکل مواجه شد، پدر و دیگر فرزندان را چه کار کنیم؟
به طور خلاصه، در بحث اول، یکی از راه حلها این است که اگر پردازه پدر با مشکل مواجه شد، فرزندان را نیز بکشیم (در ویندوز میگوییم End Task در لینوکس میگوییم Kill و در مک میگوییم Quit)
حالا پاسخ به سؤال اصلی:
به همین دلیل است که با قفل کردن یک پنجره (یعنی مختل شدن کار هسته)، تمام پنجرهها بسته میشود.
برای اینکه بحث را بهتر درک کنید، ابتدا چند پنجره مختلف باز کنید و در هر یک، به پوشهها و درایوهای مختلف بروید.
کلیدهای Ctrl+Alt+Delete را بزنید تا Task Manager باز شود. اگر به تب Processes بروید و دنبال پردازه explorer بگردید، خواهید دید که با اینکه ما مثلاً سه پنجره داریم، اما فقط یک پردازه به نام explorer داریم:
برای این که هر پنجره در پردازه مختص به خودش باز شود و کار او در دیگری اختلال ایجاد نکند، مراحل زیر را طی کنید:
۱- به Control Panel بروید.
۲- روی Folder Options دابل کلیک کنید.
۳- به تب View بروید.
۴- دنبال گزینهای به نام Launch folder windows in separate process بگردید و آنرا فعال کنید و OK کنید. (معنی عبارت: هر پنجره مربوط به پوشهها را در یک پردازه جداگانه اجرا کن)
حالا از این پس، هر پنجره جدیدی که از Windows Explorer باز کنید در یک پردازه جدید اجرا میشود. اگر یکی قفل کرد، فقط همان پنجره بسته میشود نه کل پنجرهها.
نکته: مثل قبل میتوانید مثلاً ده پنجره را به عنوان فرزند یکی و چند پنجره را به عنوان فرزند دیگری باز کنید. برای اینکه یک پنجره فرزند دیگری شود، وقتی یک پنجره باز است، کلیدهای Ctrl+N را بزنید تا یک فرزند از آن ایجاد شود.
میبینید که سه پنجره باز است، اما دو پردازه داریم. چون پنجرههای ۲ و ۳ فرزند یک پردازه هستند. اگر یکی از این دو دچار مشکل شود، هر دو بسته میشوند، اما آن یکی باز میماند.
اینکه این کار خوب است یا بد به قدرت سیستم شما (رم و سی.پی.یو) بستگی دارد. باز کردن هر پنجره در یک پراسس جدید، رم شما را به شدت اشغال میکند!
به هر حال، این مطلب بحثی بود در مورد پردازههای پدر و فرزند و شاید هم به نوعی، Multi-Threading (چند نخی) و در عین حال ترفندی بود برای آنها که ممکن است با اکسپلورر خود مشکل داشته باشند و مثل من با ورود به پوشههای شامل ویدئو (با نمای Thumbnails)، یک دفعه اکسپلوررشان قفل میکند.
کمی مقدمه: مدیریت پردازهها
دانشجویان رشته کامپیوتر که درس «سیستم عامل» را پاس کرده باشند، مطمئناً میدانند که ما مبحث مفصلی داریم به نام « Process Management » یا مدیریت پردازهها.یکی از زیرشاخههای این مبحث، بحث انشعاب پردازهها (یا همان چنگال: Fork) است.
در این بخش گفته میشود که ممکن است یک پردازه به دلایل مختلف، پردازههای دیگری را ایجاد یا فراخوانی کند که به پردازه اول، پدر یا والد (Parent) و به بقیه پردازهها، فرزند (Child) گفته میشود.
حالا موضوع این است که اگر پردازه پدر با مشکل مواجه شد، ما چه رفتاری با فرزندها داشته باشیم؟ و همینطور، برعکس. یعنی اگر فرزند با مشکل مواجه شد، پدر و دیگر فرزندان را چه کار کنیم؟
به طور خلاصه، در بحث اول، یکی از راه حلها این است که اگر پردازه پدر با مشکل مواجه شد، فرزندان را نیز بکشیم (در ویندوز میگوییم End Task در لینوکس میگوییم Kill و در مک میگوییم Quit)
حالا پاسخ به سؤال اصلی:
چرا با قفل کردن یک پنجره کل Windows Explorer بسته میشود؟
وقتی یک پنجره اکسپلورر باز میکنید و مثلاً به درایو C میروید، شما هسته برنامه Windows Explorer را یک بار اجرا کردهاید. حالا اگر یکی دیگر باز کنید و به درایو D بروید، سیستم عامل چک میکند که اگر هسته برنامه در حال اجرا بود، فقط یک نمونه از پنجره (یک فرزند) ایجاد میکند و در آن درایو D را نشان میدهد. در حقیقت این، فرزندِ همان Windows Explorer قبلی است. حالا هر کدام از اینها که با مشکل مواجه شوند، در حقیقت هسته اکسپلورر که همان پدر است با مشکل مواجه شده. در سیستم عامل ویندوز اینطور تنظیم شده است که اگر پدر مرد، تمام فرزندان را نیز بکش!به همین دلیل است که با قفل کردن یک پنجره (یعنی مختل شدن کار هسته)، تمام پنجرهها بسته میشود.
راه حل؟
خیلی ساده است! ما به ویندوز خواهیم گفت که هر پنجره را در یک پردازه جداگانه اجرا کن. یعنی در حقیقت هر پنجره را به عنوان یک پدر در نظر بگیر!برای اینکه بحث را بهتر درک کنید، ابتدا چند پنجره مختلف باز کنید و در هر یک، به پوشهها و درایوهای مختلف بروید.
کلیدهای Ctrl+Alt+Delete را بزنید تا Task Manager باز شود. اگر به تب Processes بروید و دنبال پردازه explorer بگردید، خواهید دید که با اینکه ما مثلاً سه پنجره داریم، اما فقط یک پردازه به نام explorer داریم:
برای این که هر پنجره در پردازه مختص به خودش باز شود و کار او در دیگری اختلال ایجاد نکند، مراحل زیر را طی کنید:
۱- به Control Panel بروید.
۲- روی Folder Options دابل کلیک کنید.
۳- به تب View بروید.
۴- دنبال گزینهای به نام Launch folder windows in separate process بگردید و آنرا فعال کنید و OK کنید. (معنی عبارت: هر پنجره مربوط به پوشهها را در یک پردازه جداگانه اجرا کن)
حالا از این پس، هر پنجره جدیدی که از Windows Explorer باز کنید در یک پردازه جدید اجرا میشود. اگر یکی قفل کرد، فقط همان پنجره بسته میشود نه کل پنجرهها.
نکته: مثل قبل میتوانید مثلاً ده پنجره را به عنوان فرزند یکی و چند پنجره را به عنوان فرزند دیگری باز کنید. برای اینکه یک پنجره فرزند دیگری شود، وقتی یک پنجره باز است، کلیدهای Ctrl+N را بزنید تا یک فرزند از آن ایجاد شود.
میبینید که سه پنجره باز است، اما دو پردازه داریم. چون پنجرههای ۲ و ۳ فرزند یک پردازه هستند. اگر یکی از این دو دچار مشکل شود، هر دو بسته میشوند، اما آن یکی باز میماند.
خوب یا بد؟
سؤال این است که این کار، اگر خوب است، چرا مایکروسافت خودش به طور پیشفرض این گزینه را فعال نکرده؟اینکه این کار خوب است یا بد به قدرت سیستم شما (رم و سی.پی.یو) بستگی دارد. باز کردن هر پنجره در یک پراسس جدید، رم شما را به شدت اشغال میکند!
به هر حال، این مطلب بحثی بود در مورد پردازههای پدر و فرزند و شاید هم به نوعی، Multi-Threading (چند نخی) و در عین حال ترفندی بود برای آنها که ممکن است با اکسپلورر خود مشکل داشته باشند و مثل من با ورود به پوشههای شامل ویدئو (با نمای Thumbnails)، یک دفعه اکسپلوررشان قفل میکند.