استفاده از دستور kill در لینوکس
این دستور از ابزارهای داخلی تمام توزیع های لینوکس است و نیازی به نصب و راه اندازی ندارد. کافیست با سینتکس و آپشن های متنوع آن آشنا باشید و سپس از آنها برای پیاده سازی سناریوهای متنوع خود استفاده کنید.
دستور kill در لینوکس با هدف خاتمه دادن به فعالیت فرآیندهای موردنظر اجرا می شود که برای این کار می توان از انواع سیگنال ها استفاده کرد.
پیش نیازهای استفاده از دستور kill در لینوکس
- سیستم یا سرور مجهز به لینوکس
- حساب کاربری با امتیازات روت
- دسترسی به ترمینال
* اگر می خواهید سرور لینوکس شما در کنار میزبانی از انواع فرآیندها، آزادی لازم برای kill کردن یا از بین بردن آنها را هم به شما بدهد، توصیه می کنیم به صفحه خرید سرور مجازی لینوکس مراجعه کنید.
سینتکس و آپشن های دستور kill
سینتکس اصلی دستور kill به صورت زیر است:
kill [signal] PID
سینتکس بدون آپشن دستور kill برای خاتمه دادن به فرآیند موردنظر استفاده می شود. اما آپشن های دیگری هم وجود دارند که با استفاده از آنها می توان پروسه خاتمه فرآیند و ارسال سیگنال ها را به طور پیشرفته تر مدیریت کرد.
رایج ترین سیگنال ها/آپشن های دستور kill
سیگنال | شماره سیگنال | کاربرد |
SIGHUP یا HUP | 1 | ریلود کردن فرآیند و ذخیره سازی اطلاعات موردنیاز در صورت قطع و اتصال مجدد |
SIGINT یا INT | 2 | ارسال سیگنال توقف |
SIGQUIT یا QUIT | 3 | خروج فوری و کامل فرآيند (آزادسازی تمام منابع و ثبت فایل حاوی از اطلاعات و وضعیت فرآیند موقع خروج) |
SIGABRT یا ABRT | 6 | پایان یافتن فعالیت فرآیند توسط خودش موقع بروز شرایط ناپسند یا هر نوع خطای جدی |
SIGALRM یا ALRM | 14 | ارسال هشدار به فرآیند موردنظر در یک زمان مشخص توسط تایمر |
SIGTERM یا TERM | 15 | خاتمه دادن به فعالیت فرآیند بعد از ذخیره سازی وضعیت و تکمیل عملیات مربوط به آن |
SIGCONT یا CONT | 18 | از سر گیری فرآیند متوقف شده |
SIGSTOP یا STOP | 19 | متوقف کردن فرآیند |
برای مشاهده سایر سیگنال های مربوط به دستور kill می توانید از دستور زیر استفاده کنید:
kill -l
اشکال مختلف دستور kill در لینوکس
دستور kill در شکل های مختلفی قابل استفاده است که هر کدام از آنها متناسب با آپشن های خود، کاربردهای متنوعی دارند.
دستور killall
دستور killall به جای شماره فرآیند، از اسم فرآیند برای پایان دادن به فعالیت آن استفاده می کند. همچنین،
از بین بردن چند فرآیند به صورت همزمان از ویژگی های برجسته این دستور است.
به عنوان مثال اگر قصد خاتمه دادن به فرآیند های مربوط به firefox را دارید، احتمالاً با چند فرآیند سروکار دارید که اگر بخواهید از دستور kill استفاده کنید، باید تمام شماره ها را به دستور kill اضافه کنید.
kill 1234 4321 2342
در حالی که با دستور killall کافیست فقط اسم firefox را به دستور اضافه کنید تا تمام فرآیندهای هم اسم با firefox خاتمه پیدا کنند:
killall firefox
آپشن های دستور killall
e: پیدا کردن فرآیندهای دقیقاً هم اسم با فرآیند موردنظر
I: نادیده گرفتن یک مورد خاص موقع تلاش برای پیدا کردن فرآیند (ها) موردنظر
i: درخواست یک مرحله اضافی برای تایید پروسه kill فرآیند
u: از بین بردن فرآیندهای متعلق به یک کاربر خاص
v: ارائه یک گزارش در مورد روند از بین روند فرآیند موردنظر
o: از بین بردن فرآیندها مربوط به قبل از یک زمان مشخص
y: از بین بردن فرآیندها مربوط به بعد از یک زمان مشخص
دستور pkill
دستور pkill یک فرآیند را بر اساس اسم و سایر شرایط دیگر از بین می برد و انعطاف پذیری بیشتری نسبت به دستور kill و killall دارد.
آپشن های دستور pkill
n: خاتمه دادن به جدیدترین فرآیند
o: خاتمه داده به قدیمی ترین فرآیند
u: خاتمه دادن به فرآیندهای متعلق به یک کاربر خاص
x: خاتمه دادن به فرآیندهای مطابق با الگوی موردنظر
دستور xkill
xkill یک ابزار گرافیکی است که خاتمه دادن به فعالیت فرآیندها را برای شما آسان تر می کند. به این صورت که کافیست دستور xkill را اجرا کنید و بعد با کلیک روی فرآیندهای موردنظر، آن را از بین ببرید.
مثال های کاربردی از دستور kill
اکنون که با دستور kill در لینوکس و انواع آن آشنا شدید، وقت آن است که کاربرد این دستور را در قالب مثال های مختلف بررسی کنیم.
پایان دادن به فعالیت فرآیند موردنظر با kill
برای اینکه فرآیند موردنظر را با استفاده از دستور kill از بین ببرید، باید شماره فرآیند آن را بدانید. پس با اجرای دستور زیر می توانید به فعالیت فرآیند شماره ۱۲۳۴ خاتمه دهید:
kill 1234
حالا اگر شماره فرآیند موردنظر را نمی دانید و به دنبالی راهی برای پیدا کردن شماره فرآیند هستید، ۲ راه دارید:
۱- از دستور pidof استفاده کنید.
برای پیدا کردن شماره فرآیند با pidof، باید اسم فرآیند را بدانید. به عنوان مثال اگر قصد پیدا کردن شماره فرآیندهای مربوط به apache را دارید، باید دستور زیر را اجرا کنید:
pidof apache
سپس، شماره فرآیندهایی که در خروجی این دستور می بینید را در دستور kill لحاظ کنید:
kill 6263 6199 6142 6076
۲- دستور ps و grep را ترکیب کنید.
برای این کار کافیست خروجی فرآیندهای در حال اجرای مربوط به ps را به دستور grep پیپ کنید و آن را بر اساس اسم فرآیندی که به دستور grep اضافه کرده اید، فیلتر کنید.
به عنوان مثال، اگر قصد پیدا کردن شماره فرآیندهای مربوط به firefox را دارید، دستور زیر را اجرا کنید:
ps aux | grep firefox
دستور ps aux، تمام فرآیندهای در حال اجرا را استخراج می کند. دستور grep firefox از بین این فرآیندهای در حال اجر، خطوط حاوی firefox را نشان می دهد که ستون دوم این خطوط مربوط به شماره فرآیند است.
متوقف سازی یک فرآیند با آپشن term
گاهی اوقات ممکن است بخواهید این فرصت به فرآیند موردنظر بدهید که وضعیت خود را ذخیره کند و وظایف خود را قبل kill شدن به پایان برساند.
* اگر دستور kill را بدون آپشن اجرا کنید، سیگنال term به طور پیش فرض فعال و ارسال می شود.
برای این کار کافیست آپشن term را به دستور kill اضافه کنید که ۳ حالت دارد:
kill -15 4321
kill -TERM 4321
kill -SIGTERM 4321
متوقف سازی فوری یک فرآیند با سیگنال SIGKILL
اگر می خواهید فوراً به فعالیت فرآیند موردنظر خاتمه دهید و ذخیره وضعیت و پایان یافتن عملیات مربوط به آن، اهمیتی برای شما ندارد، کافیست SIGKILL را به آن اضافه کنید که ۳ حالت دارد:
kill -19 4321
kill -KILL 4321
kill -SIGKILL 4321
ریلود کردن یک فرآیند برای اعمال پیکربندی های جدید
اگر تغییرات جدید در پیکربندی فرآیند موردنظر ایجاد کرده اید و می خواهید بدون ریستارت سیستم، فرآیند موردنظر را ریلود کنید تا این تغییرات اعمال شوند، کافیست آپشن HUP را به دستور اضافه کنید که ۳ حالت دارد:
kill -1 4321
kill -HUP 4321
kill -SIGHUP 4321
متوقف کردن و از سر گیری فرآیند با دو سیگنال SIGSTOP و SIGCONT
دستور kill در لینوکس می تواند فرآیند موردنظر را برای مدتی متوقف کند. این کار زمانی می تواند مفید باشد که بخواهید منابعی که در اختیار فرآیند(ها) موردنظر قرار دارد را به طور موقت آزاد کنید.
برای این کار باید دستور kill را به یکی از ۳ حالت زیر اجرا کنید:
kill -19 1234
kill -STOP 1234
kill -SIGSTOP 1234
بعد از یک مدت مشخص می توانید با اجرای دستور زیر، مجدداً فرآیندهای متوقف شده را اجرا کنید:
kill -18 1234
kill -CONT 1234
kill -SIGCONT 1234
خاتمه دادن به فعالیت چند فرآیند با kill
برای این کار کافیست تمام شماره فرآیندها را به ترتیب در دستور kill لحاظ کنید:
kill 1234 4321 2342
از بین بردن فرآیندها بر اساس شماره پورت یا فایل
گاهی اوقات ممکن لازم باشد فرآیندها را بر اساس فایل هایی که باز کرده اند یا شماره پورت هایی که استفاده کرده اند، شناسایی و kill کنید. مخصوصاً مواقعی که لازم است مشکلات مربوط به شبکه یا فایل ها را شناسایی و رفع کنید، این دستور بسیار مفید خواهد بود.
برای بستن فرآیندها بر اساس شماره پورت، دستور kill را به صورت زیر اجرا کنید:
kill $(lsof -t -i :[PORT_NUMBER])
برای خاتمه دادن به فرآیندهای درگیر با یک فایل خاص، از دستور زیر استفاده کنید:
kill $(lsof -t /[path_to_file])
دستور lsof مثال اول، فعالیت های شبکه را فیلتر می کند و با آپشن t شماره فرآیندها را استخراج کرده و به دستور kill ارسال می کند تا خاتمه پیدا کنند.
دستور lsof مثال دوم، لیست مربوط به فایل ها و فرآیندها درگیر با آنها را استخراج می کند و آپشن t هم شماره فرآیندها را برمی گرداند و در اختیار kill قرار می دهد.
خاتمه دادن به تمام فرآیندها با killall
اگر نمی خواهید درگیر شماره فرآیندها شوید و خاتمه دادن به فرآیندها بر اساس اسم آنها برای شما کاربردی تر است، می توانید از دستور killall استفاده کنید.
به این صورت که اسم سرویس یا برنامه موردنظر را در دستور killall لحاظ می کنید و این دستور هم به تمام فرآیندهای هم اسم با سرویس یا برنامه وارد شده خاتمه می دهد.
killall apache
اگر چند فرآیند مربوط به این سرویس یا برنامه در حال اجرا باشند، اجرای دستور killall همه آنها را به صورت همزمان می بندد.
در صورت تمایل به دریافت یک درخواست تایید قبل اجرای دستور killall می توانید آپشن i را هم به دستور اضافه کنید:
killall -i apache
خاتمه دادن به فرآیندها بر اساس زمان اجرا
دو آپشن o و y برای فیلترسازی زمان دستور killall قابل استفاده هستند.
به این صورت که اگر می خواهید فرآیندهای که بیشتر از ۱۵ دقیقه در حال اجرا هستند و هنوز هم ادامه دارند را از بین ببرید، دستور زیر را اجرا کنید:
killall -o 15m
اگر می خواهید فرآیندهای جدیدتر که طول عمر کمتر از ۱۵ دقیقه دارند را kill کنید، از دستور زیر استفاده کنید:
killall -y 15m
در صورت تمایل می توانید اسم برنامه را هم لحاظ کنید که این فیلتر زمانی فقط روی فرآیندهای مربوط به آن فرآیند اجرا شود:
killall -o 15m chrome
خاتمه اجباری فرآیندهای مربوط به اپلیکیشن ها
اگر می خواهید تمام فرآیندهای در حال اجرا توسط اپلیکیشن ها را به صورت فوری و اجباری از بین ببرید، می توانید از آپشن ۹ دستور kill به صورت زیر استفاده کنید:
killall -9 applications
از بین بردن جدیدترین فرآیند مربوط به کاربر موردنظر
pkill -n -u user_name
خاتمه دادن به تمام فرآیندهای مربوط به یک کاربر خاص
pkill -u user_name
خاتمه دادن به تمام فرآیندهای مطابق با الگوی خاص
برای این کار کافیست الگوی موردنظر را به دستور اضافه کنید. به عنوان مثال این الگو می تواند ping باشد.
pkill -9 -f "ping"
با اجرای دستور بالا، فرآیند مربوط به ping که در حال اجرا است را شناسایی کرده و به صورت اجباری و فوری به فعالیت آن خاتمه می دهید.
چند نکته در مورد دستور kill در لینوکس
- استفاده از سیگنال خاتمه اجباری یا همان سیگنال شماره ۹ می تواند باعث از دست دادن داده یا خرابی فایل سیستم شوند.
- بعضی از فرآیندها می توانند سیگنال های دستور kill را نادیده بگیرند (به جز سیگنال های SIGKIL و SIGSTOP)
- خطای Operation Not Permitted به خاطر نداشتن مجوز لازم برای مدیریت فرآیند موردنظر است که با اضافه کردن دستور sudo به ابتدای آن می توانید از امتیازات لازم برای اجرای آن برخوردار شوید.
- خطای No Such Process زمانی اتفاق می افتد که شماره فرآیند را اشتباه وارد کرده باشید یا اینکه فرآیند مربوط به آن قبلاً خاتمه پیدا کرده است.
- می توانید از دستور kill برای ایجاد اسکریپت های لازم جهت مدیریت و خودکار سازی برخی از تسک ها استفاده کرد.
سخن آخر
با دستور kill در لینوکس می توانید به فعالیت فرآیندهای موردنظر خود خاتمه دهید. این دستور اشکال و آپشن های متنوعی دارد که می توانید متناسب با نیاز و شرایط خود از مناسب ترین آنها استفاده کنید.