خوش آموز درخت تو گر بار دانش بگیرد، به زیر آوری چرخ نیلوفری را
آموزش استفاده از دستور Kill در لینوکس
لینوکس یک سیستم عامل عالی و پیشرفته است، اما کامل نیست. هر چند وقت یکبار، برخی از برنامه ها شاید شروع به عملکرد نامنظم کنند و پاسخگو نباشند یا شروع به استفاده مقدار زیادی از منابع سیستم کنند. برنامه های Unresponsive را نمی توان مجددا اجرا کرد زیرا فرآیند اصلی برنامه هرگز به طور کامل بسته نمی شود. تنها راه باقی مانده این است که سیستم را ریستارت کنید و یا اینکه فرآیند های آن برنامه را Kill کنید.
kill یک shell است که در اکثر shell های مشتق شده از Bourne مانند Bash و Zsh تعبیه شده است. رفتار این دستور بین shell ها و فایل اجرایی مستقل bin/kill کمی متفاوت است.
از دستور type برای نمایش تمام مکان های حاوی kill در سیستم خود استفاده کنید.
خروجی بالا نشان می دهد که shell builtin نسبت به فایل اجرایی مستقل اولویت دارد و هر زمان که kill را تایپ کنید از آن استفاده می شود. ولی اگر می خواهید از فایل اجرایی استفاده کنید، باید مسیر کامل bin/kill را مشخص کنید.
syntax دستور kill به شکل زیر است:
دستور kill سیگنالی را به فرآیندها یا گروههای پردازشی مشخص میفرستد و باعث میشود آنها مطابق سیگنال عمل کنند. اگر که سیگنال مشخص نشده باشد، به طور پیش فرض روی 15- (-TERM) تنظیم می شود.
رایج ترین سیگنال های مورد استفاده عبارتند از:
برای دریافت لیستی از تمام سیگنال های موجود، دستور را با گزینه l- اجرا و فراخوانی کنید:
سیگنال ها را می توان به سه روش مختلف مشخص کرد:
با استفاده از عدد (به عنوان مثال، 1- یا s- 1)
با استفاده از پیشوند "SIG" (به عنوان مثال، -SIGHUP یا -s SIGHUP)
بدون پیشوند "SIG" (به عنوان مثال، HUP- یا s HUP-)
دستورات زیر معادل یکدیگر هستند:
PID های ارائه شده به دستور kill می تواند یکی از موارد زیر باشد:
اگر PID بزرگتر از 0 باشد، سیگنال با شناسه مساوی با PID به فرآیند ارسال می شود.
اگر PID برابر با 0 باشد، سیگنال به تمام فرآیندهای گروه فرآیند جاری ارسال می شود. به عبارت دیگر، سیگنال به تمام فرآیندهای متعلق به GID شل ای که دستور kill را فراخوانی و اجرا کرده، ارسال می شود. برای مشاهده شناسه های گروه فرآیند (GID) از دستور ps -efj استفاده کنید.
اگر PID برابر با 1- باشد، سیگنال با همان UID کاربر که دستور را فراخوانی میکند، به تمام فرآیندها ارسال میشود. ولی اگر کاربر root باشد، سیگنال به همه فرآیندها به جز init و خود فرآیند kill ارسال می شود.
کاربران عادی فقط میتوانند سیگنالهایی را به فرآیندهای خود ارسال کنند. اما کاربر Root یا کاربران دارای امتیازات sudo برای پردازش های سایر کاربران هم می توانند سیگنال ارسال کنند.
به منظور خاتمه بخشیدن و بستن یک فرآیند در لینوکس ابتدا باید شماره شناسه فرآیند (PID) را پیدا کنید. شما می توانید این کار را با استفاده از دستورات مختلف مانند top، ps، pidof و pgrep انجام دهید. فرض کنید مرورگر فایرفاکس هنگ کرده و شما باید فرآیند فایرفاکس را ببندید. می توانید برای پیدا کردن PID مرورگر از دستور pidof استفاده کنید:
دستور فوق تمامی pid های مربوط به فرآیندهای مرورگر فایرفاکس را نمایش می دهد.
حالا ID مربوط به فرآیندها را می دانید، می توانید با ارسال سیگنال TERM همه آنها را ببندید.
و البته به روش زیر هم می توانیم فرآیند مورد نظر را خاتمه دهیم:
به عنوان مثال، برای reload کردن Nginx باید سیگنالی را به فرآیند اصلی ارسال کنید. شناسه اصلی پردازش Nginx را می توان در فایل nginx.pid یافت که معمولاً در فولدر var/run قرار دارد.
از دستور cat برای یافتن PID اصلی Nginx استفاده کنید:
زمانی که master PID یا PID اصلی را یافتید، حالا می توانید Nginx را با reload کنید:
در آخر، دستور kill برای ارسال سیگنال به فرآیندها استفاده می شود. سیگنالی که اغلب استفاده می شود SIGKILL یا 9- است که به فرآیندهای مورد نظر را خاتمه می بخشد و آنها را می بندد.
kill یک shell است که در اکثر shell های مشتق شده از Bourne مانند Bash و Zsh تعبیه شده است. رفتار این دستور بین shell ها و فایل اجرایی مستقل bin/kill کمی متفاوت است.
از دستور type برای نمایش تمام مکان های حاوی kill در سیستم خود استفاده کنید.
type -a kill
kill is a shell builtin
kill is /bin/kill
خروجی بالا نشان می دهد که shell builtin نسبت به فایل اجرایی مستقل اولویت دارد و هر زمان که kill را تایپ کنید از آن استفاده می شود. ولی اگر می خواهید از فایل اجرایی استفاده کنید، باید مسیر کامل bin/kill را مشخص کنید.
syntax دستور kill به شکل زیر است:
kill [OPTIONS] [PID]...
دستور kill سیگنالی را به فرآیندها یا گروههای پردازشی مشخص میفرستد و باعث میشود آنها مطابق سیگنال عمل کنند. اگر که سیگنال مشخص نشده باشد، به طور پیش فرض روی 15- (-TERM) تنظیم می شود.
رایج ترین سیگنال های مورد استفاده عبارتند از:
1 (HUP) - Reload a process.
9 (KILL) - Kill a process.
15 (TERM) - Gracefully stop a process.
برای دریافت لیستی از تمام سیگنال های موجود، دستور را با گزینه l- اجرا و فراخوانی کنید:
kill -l
سیگنال ها را می توان به سه روش مختلف مشخص کرد:
با استفاده از عدد (به عنوان مثال، 1- یا s- 1)
با استفاده از پیشوند "SIG" (به عنوان مثال، -SIGHUP یا -s SIGHUP)
بدون پیشوند "SIG" (به عنوان مثال، HUP- یا s HUP-)
دستورات زیر معادل یکدیگر هستند:
kill -1 PID_NUMBER kill -SIGHUP PID_NUMBER kill -HUP PID_NUMBER
PID های ارائه شده به دستور kill می تواند یکی از موارد زیر باشد:
اگر PID بزرگتر از 0 باشد، سیگنال با شناسه مساوی با PID به فرآیند ارسال می شود.
اگر PID برابر با 0 باشد، سیگنال به تمام فرآیندهای گروه فرآیند جاری ارسال می شود. به عبارت دیگر، سیگنال به تمام فرآیندهای متعلق به GID شل ای که دستور kill را فراخوانی و اجرا کرده، ارسال می شود. برای مشاهده شناسه های گروه فرآیند (GID) از دستور ps -efj استفاده کنید.
اگر PID برابر با 1- باشد، سیگنال با همان UID کاربر که دستور را فراخوانی میکند، به تمام فرآیندها ارسال میشود. ولی اگر کاربر root باشد، سیگنال به همه فرآیندها به جز init و خود فرآیند kill ارسال می شود.
کاربران عادی فقط میتوانند سیگنالهایی را به فرآیندهای خود ارسال کنند. اما کاربر Root یا کاربران دارای امتیازات sudo برای پردازش های سایر کاربران هم می توانند سیگنال ارسال کنند.
به منظور خاتمه بخشیدن و بستن یک فرآیند در لینوکس ابتدا باید شماره شناسه فرآیند (PID) را پیدا کنید. شما می توانید این کار را با استفاده از دستورات مختلف مانند top، ps، pidof و pgrep انجام دهید. فرض کنید مرورگر فایرفاکس هنگ کرده و شما باید فرآیند فایرفاکس را ببندید. می توانید برای پیدا کردن PID مرورگر از دستور pidof استفاده کنید:
pidof firefox
دستور فوق تمامی pid های مربوط به فرآیندهای مرورگر فایرفاکس را نمایش می دهد.
6263 6199 6142 6076
حالا ID مربوط به فرآیندها را می دانید، می توانید با ارسال سیگنال TERM همه آنها را ببندید.
kill -9 6263 6199 6142 6076
و البته به روش زیر هم می توانیم فرآیند مورد نظر را خاتمه دهیم:
kill -9 $(pidof firefox)
نحوه Reload کردن پردازش ها با دستور kill در لینوکس
یکی دیگر از موارد استفاده رایج برای kill، ارسال سیگنال HUP است که به فرآیندها میگوید تنظیمات خود را دوباره reload کنند.به عنوان مثال، برای reload کردن Nginx باید سیگنالی را به فرآیند اصلی ارسال کنید. شناسه اصلی پردازش Nginx را می توان در فایل nginx.pid یافت که معمولاً در فولدر var/run قرار دارد.
از دستور cat برای یافتن PID اصلی Nginx استفاده کنید:
cat /var/run/nginx.pid
30251
زمانی که master PID یا PID اصلی را یافتید، حالا می توانید Nginx را با reload کنید:
sudo kill -1 30251
در آخر، دستور kill برای ارسال سیگنال به فرآیندها استفاده می شود. سیگنالی که اغلب استفاده می شود SIGKILL یا 9- است که به فرآیندهای مورد نظر را خاتمه می بخشد و آنها را می بندد.
نمایش دیدگاه ها (0 دیدگاه)
دیدگاه خود را ثبت کنید: