در سیستم عامل لینوکس دستور kill برای خاتمه دادن به یک Process موجود است. این دستور به اجرای سرور بدون نیاز به ریبوت کردن بعد از یک تغییر یا آپدیت اساسی را امکان پذیر میسازد. و این یکی از قدرت های بزرگ لینوکس است و در حقیقت یکی از دلایلی است که چرا روی 90 درصد از سرورهای سیاره زمین سیستم عامل لینوکس وجود دارد.
دستور kill یک سیگنال مشخصی را به سمت یک پروسس ارسال میکند. دستور kill میتواند به شیوه های متفاوتی اجرا شود (به صورت مستقیم یا از طریق یک اسکریپت شل)
استفاده از دستور kill از مسیر /usr/bin یکسری قابلیت ها بیشتری را برای kill کردن یک پروسس به واسطه نام آن process و با استفاده از pkill برای شما فراهم میآورد. ساختار کلی دستور kill به شرح زیر میباشد.
در دستور kill نام یک سیگنال میتواند یکی از موارد زیر باشد.
همانطور که از رفتار بالا مشخص است SIGTERM راه پیش فرض و مطمئنی (امن) برای kill کردن یک process میباشد. SIGHUP راهی با امنیت کمتر نسبت به SIGTERM برای kill کردن یک پروسس است. SIGKILL ناامن ترین راه در میان 3 سیگنال بالا برای kill کردن یک پروسس است که process را بدون هیچ گونه ذخیره ای خاتمه میدهد.
به منظور kill کردن یک پروسس ما نیاز داریم که Process ID آن را بدانیم. یک پروسس در حقیقت نمونه ای از یک برنامه است هر زمان که یک برنامه استارت میشود به صورت اتوماتیک یک PID یونیک برای پروسس ایجاد میشود هر process در لینوکس یک PID دارد اولین پروسسی که به هنگام Boot شدن سیستم استارت میشود پروسس init میباشد که مقدار آن در اکثر مواقع "1" است.
init پروسس مادر است و به شکل بالا نمی توان آنرا kill کرد، و این ما را مطمئن میسازد که پروسس مادر به صورت تصادفی kill نخواهد شد. زمانیکه درخواستی برای shutdown از طریق kill ایجاد میشود init خودش تصمیم میگیرد و اجازه میدهد که kill شود.
برای دیدن همه process ها و PID های اختصاص یافته به آنها دستور زیر را اجرا میکنیم.
نمونه خروجی :
و اما برای customis کردن خروجی بالا میتوان از دستور pidof به همراه نام process همانند زیر استفاده کرد.
نمونه خروجی :
راه دیگر برای دستیابی به هدف بالا، استفاده از ساختار زیر است.
نمونه خروجی :
قبل از آنکه ادامه دهیم و دستور kill را اجرا کنیم به نکات زیر دقت کنید.
- یک user میتواند تمامی پروسس های خودش را kill کند.
- یک user نمیتواند پروسس user دیگری را kill کند.
- یک user نمیتواند پروسس هایی که سیستم در حال استفاده از آنهاست را kill کند.
- یک کاربر root میتواند پروسس های سیستمی (System-level-process) و پروسس هر کاربری را kill کند.
راه دیگر برای اجرا کردن کاربرد بالا استفاده از دستور pgrep میباشد.
نمونه خروجی :
برای kill کردن Process ID بالا از دستور kill همانند زیر استفاده میکنیم.
دستور بالا پروسسی که PID آن 3139 است را kill خواهد کرد، دقت کنید که PID یک مقدار عدد از process است.
راه دیگر برای اجرای کاربرد بالا استفاده از دستور زیر میباشد.
دستور 'kill -9 PID' شبیه به دستور 'kill -SIGKILL PID' میباشد.
نحوه Kill کردن یک Process با استفاده از نام آن
شما باید نام یک پروسس را قبل از kill کردن آن بدانید، از آنجایی که ممکن است process را اشتباهی kill کنید.
kill کردن بیشتر از یک پروسس به صورت همزمان
اگر یک پروسس نمونه های زیادی داشته باشد همچنین دارای تعدادی پروسس child باشد ما میتوانیم از دستور killall استفاده کنیم. این تنها دستوری از این خانواده است که میتواند به جای شماره پروسس نام process را به عنوان گزینه در ساختار خود دریافت کند.
ساختار دستور Killall :
برای kill کردن همه نمونه پروسس های MySQL به همراه پروسس های child آن دستور زیر را استفاده کنید.
شما همیشه میتوانید وضعیت پروسس را که آیا در حال اجراست یا خیر با استفاده از هر کدام دستورات زیر بررسی کنید.
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
آنچه که شما باید درباره process ها در لینوکس بدانید
دستور ps در لینوکس برای مانیتور یا پیدا کردن process ها
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
با ما در ارتباط باشید و نظرات ارزشمند خود را با ما به اشتراک بگذارید.
دستور kill یک سیگنال مشخصی را به سمت یک پروسس ارسال میکند. دستور kill میتواند به شیوه های متفاوتی اجرا شود (به صورت مستقیم یا از طریق یک اسکریپت شل)
استفاده از دستور kill از مسیر /usr/bin یکسری قابلیت ها بیشتری را برای kill کردن یک پروسس به واسطه نام آن process و با استفاده از pkill برای شما فراهم میآورد. ساختار کلی دستور kill به شرح زیر میباشد.
کد PHP:
# kill [signal or option] PID(s)
کد PHP:
Signal Name Signal Value Behaviour
SIGHUP 1 Hangup
SIGKILL 9 Kill Signal
SIGTERM 15 Terminate
به منظور kill کردن یک پروسس ما نیاز داریم که Process ID آن را بدانیم. یک پروسس در حقیقت نمونه ای از یک برنامه است هر زمان که یک برنامه استارت میشود به صورت اتوماتیک یک PID یونیک برای پروسس ایجاد میشود هر process در لینوکس یک PID دارد اولین پروسسی که به هنگام Boot شدن سیستم استارت میشود پروسس init میباشد که مقدار آن در اکثر مواقع "1" است.
init پروسس مادر است و به شکل بالا نمی توان آنرا kill کرد، و این ما را مطمئن میسازد که پروسس مادر به صورت تصادفی kill نخواهد شد. زمانیکه درخواستی برای shutdown از طریق kill ایجاد میشود init خودش تصمیم میگیرد و اجازه میدهد که kill شود.
برای دیدن همه process ها و PID های اختصاص یافته به آنها دستور زیر را اجرا میکنیم.
کد PHP:
# ps -A
کد PHP:
PID TTY TIME CMD
1 ? 00:00:01 init
2 ? 00:00:00 kthreadd
3 ? 00:00:00 migration/0
4 ? 00:00:00 ksoftirqd/0
5 ? 00:00:00 migration/0
6 ? 00:00:00 watchdog/0
7 ? 00:00:01 events/0
8 ? 00:00:00 cgroup
9 ? 00:00:00 khelper
10 ? 00:00:00 netns
11 ? 00:00:00 async/mgr
12 ? 00:00:00 pm
13 ? 00:00:00 sync_supers
14 ? 00:00:00 bdi-default
15 ? 00:00:00 kintegrityd/0
16 ? 00:00:00 kblockd/0
17 ? 00:00:00 kacpid
18 ? 00:00:00 kacpi_notify
19 ? 00:00:00 kacpi_hotplug
20 ? 00:00:00 ata/0
21 ? 00:00:00 ata_aux
22 ? 00:00:00 ksuspend_usbd
کد PHP:
# pidof mysqld
کد PHP:
1684
کد PHP:
# ps aux | grep mysqld
کد PHP:
root 1582 0.0 0.0 5116 1408 ? S 09:49 0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
mysql 1684 0.1 0.5 136884 21844 ? Sl 09:49 1:09 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/log/mysqld.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/lib/mysql/mysql.sock
root 20844 0.0 0.0 4356 740 pts/0 S+ 21:39 0:00 grep mysqld
قبل از آنکه ادامه دهیم و دستور kill را اجرا کنیم به نکات زیر دقت کنید.
- یک user میتواند تمامی پروسس های خودش را kill کند.
- یک user نمیتواند پروسس user دیگری را kill کند.
- یک user نمیتواند پروسس هایی که سیستم در حال استفاده از آنهاست را kill کند.
- یک کاربر root میتواند پروسس های سیستمی (System-level-process) و پروسس هر کاربری را kill کند.
راه دیگر برای اجرا کردن کاربرد بالا استفاده از دستور pgrep میباشد.
کد PHP:
# pgrep mysq
کد PHP:
3139
کد PHP:
kill -9 3139
راه دیگر برای اجرای کاربرد بالا استفاده از دستور زیر میباشد.
کد PHP:
# kill -SIGTERM 3139
نحوه Kill کردن یک Process با استفاده از نام آن
شما باید نام یک پروسس را قبل از kill کردن آن بدانید، از آنجایی که ممکن است process را اشتباهی kill کنید.
کد PHP:
# pkill mysqld
کد PHP:
# kill PID1 PID2 PID3
or
# kill -9 PID1 PID2 PID3
or
# kill -SIGKILL PID1 PID2 PID3
ساختار دستور Killall :
کد PHP:
# killall [signal or option] Process Name
کد PHP:
# killall mysqld
کد PHP:
# service mysql status
# pgrep mysql
# ps -aux | grep mysql
همچنین توصیه میشود مقالات زیر را مطالعه کنید :
آنچه که شما باید درباره process ها در لینوکس بدانید
دستور ps در لینوکس برای مانیتور یا پیدا کردن process ها
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
چگونه با استفاده از PID Number نام یک Process را در لینوکس پیدا کنیم
نحوه پیدا کردن Process های در حال اجرا که CPU و RAM زیادی در Linux مصرف میکنند
متوقف کردن و غیر فعال کردن سرویس های ناخواسته در لینوکس
آموزش نحوه پیداکردن پروسس در حال اجرا و kill کردن آن در لینوکس
نحوه Kill کردن Process های بی مسئولیت با استفاده از دستور xkill در لینوکس
با ما در ارتباط باشید و نظرات ارزشمند خود را با ما به اشتراک بگذارید.