اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    راهنمای دستورات Kill - PKill و Killall برای بستن یک پروسس در لینوکس

    در سیستم عامل لینوکس دستور kill برای خاتمه دادن به یک Process موجود است. این دستور به اجرای سرور بدون نیاز به ریبوت کردن بعد از یک تغییر یا آپدیت اساسی را امکان پذیر میسازد. و این یکی از قدرت های بزرگ لینوکس است و در حقیقت یکی از دلایلی است که چرا روی 90 درصد از سرورهای سیاره زمین سیستم عامل لینوکس وجود دارد.
    دستور kill - pkill و killall در لینوکس






    دستور kill یک سیگنال مشخصی را به سمت یک پروسس ارسال میکند. دستور kill میتواند به شیوه های متفاوتی اجرا شود (به صورت مستقیم یا از طریق یک اسکریپت شل)

    استفاده از دستور kill از مسیر /usr/bin یکسری قابلیت ها بیشتری را برای kill کردن یک پروسس به واسطه نام آن process و با استفاده از pkill برای شما فراهم میآورد. ساختار کلی دستور kill به شرح زیر میباشد.
    کد PHP:
    # kill [signal or option] PID(s) 
    در دستور kill نام یک سیگنال میتواند یکی از موارد زیر باشد.
    کد PHP:
    Signal Name        Signal Value            Behaviour
    SIGHUP                  1                      Hangup
    SIGKILL                  9                   Kill Signal
    SIGTERM                  15                Terminate 
    همانطور که از رفتار بالا مشخص است 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 های اختصاص یافته به آنها دستور زیر را اجرا میکنیم.
    کد PHP:
    # ps -A 
    نمونه خروجی :
    کد PHP:
    PID TTY          TIME CMD
    ?        00:00:01 init
    ?        00:00:00 kthreadd
    ?        00:00:00 migration/0
    ?        00:00:00 ksoftirqd/0
    ?        00:00:00 migration/0
    ?        00:00:00 watchdog/0
    ?        00:00:01 events/0
    ?        00:00:00 cgroup
    ?        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 
    و اما برای customis کردن خروجی بالا میتوان از دستور pidof به همراه نام process همانند زیر استفاده کرد.
    کد 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 
    برای kill کردن Process ID بالا از دستور kill همانند زیر استفاده میکنیم.
    کد PHP:
    kill -9 3139 
    دستور بالا پروسسی که PID آن 3139 است را kill خواهد کرد، دقت کنید که PID یک مقدار عدد از process است.

    راه دیگر برای اجرای کاربرد بالا استفاده از دستور زیر میباشد.
    کد PHP:
    # kill -SIGTERM 3139 
    دستور 'kill -9 PID' شبیه به دستور 'kill -SIGKILL PID' میباشد.



    نحوه Kill کردن یک Process با استفاده از نام آن

    شما باید نام یک پروسس را قبل از kill کردن آن بدانید، از آنجایی که ممکن است process را اشتباهی kill کنید.
    کد PHP:
    # pkill mysqld 
    kill کردن بیشتر از یک پروسس به صورت همزمان
    کد PHP:
    # kill PID1 PID2 PID3
    or
    # kill -9 PID1 PID2 PID3
    or
    # kill -SIGKILL PID1 PID2 PID3 
    اگر یک پروسس نمونه های زیادی داشته باشد همچنین دارای تعدادی پروسس child باشد ما میتوانیم از دستور killall استفاده کنیم. این تنها دستوری از این خانواده است که میتواند به جای شماره پروسس نام process را به عنوان گزینه در ساختار خود دریافت کند.

    ساختار دستور Killall :
    کد PHP:
    # killall [signal or option] Process Name 
    برای kill کردن همه نمونه پروسس های MySQL به همراه پروسس های child آن دستور زیر را استفاده کنید.
    کد 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 در لینوکس


    با ما در ارتباط باشید و نظرات ارزشمند خود را با ما به اشتراک بگذارید.
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 01-19-2021, 03:49 AM.
    Instagram : https://www.instagram.com/iranlinuxforum

    Voip Trainer - Asterisk - Elastix - Agi Programming- NewRock

    Voip Expert :ASTERISK-ELASTIX-NewRock Certified-With Experience of Working With
    Sangoma-Digium-Openvox-Synway-Atcom-Quintum Tenor-Polycom-Yealink-Rtx-Snom
    Cisco Collaboration - CME-CUCM-CUPs-CUC-WEBEX
    LPI ( Fundamental - LPI1 and LPI2 ) - Monitoring: ZABBIX-VOIPMONITOR-NAGIOS - CCNA

    Linkedin Profile : https://www.linkedin.com/in/masuma-vahid-26b17b66/

درباره انجمن منطقه لینوکسی ها

انجمن منطقه لینوکسی ها با هدف ارتقاء سطح علمی کاربران در سطح جهانی و همچنین کمک به بالا بردن سطح علمی عمومی در زمینه های تخصصی فوق پایه گذاری شده است. انجمن منطقه لینوکسی ها از طریق کارشناسان و متخصصان پاسخگوی سوالات گوناگون کاربران مبتدی یا پیشرفته میباشد تا حد امکان تلاش شده که محیطی متنوع و کاربر پسند و به دور از هرگونه حاشیه جهت فعالیت کاربران در این انجمن ایجاد شود. لذا ما به صورت مستمر برای پیشرفت کمی و کیفی محتوی و اطلاعات انجمنمان میکوشیم که این برای ما ارزشمند و حائز اهمیت است. کلیه حقوق،اطلاعات و مقالات در این انجمن متعلق به سایت منطقه لینوکسی ها میباشد، و هرگونه نسخه برداری بدون ذکر منبع مورد پیگرد قانونی خواهد شد.

شبکه های اجتماعی
در حال انجام ...
X