ຄູ່ມືກ່ຽວກັບການຂ້າ, Pkill ແລະ ຄຳ ສັ່ງ Killall ເພື່ອຍຸຕິຂັ້ນຕອນໃນ Linux


ລະບົບປະຕິບັດການ Linux ມາພ້ອມກັບ ຄຳ ສັ່ງ kill ເພື່ອຢຸດຂະບວນການ. ຄໍາສັ່ງເຮັດໃຫ້ມັນສາມາດສືບຕໍ່ແລ່ນ server ໂດຍບໍ່ ຈຳ ເປັນຕ້ອງເລີ່ມຕົ້ນ ໃໝ່ ຫຼັງຈາກມີການປ່ຽນແປງ/ປັບປຸງ ໃໝ່. ນີ້ແມ່ນ ອຳ ນາດທີ່ຍິ່ງໃຫຍ່ຂອງ Linux ແລະນີ້ແມ່ນ ໜຶ່ງ ໃນເຫດຜົນ, ເປັນຫຍັງ Linux ກຳ ລັງເຮັດວຽກຢູ່ 90% ຂອງ server, ຢູ່ເທິງໂລກ.

ຂ້າ ຄຳ ສັ່ງສົ່ງສັນຍານ, ສັນຍານທີ່ລະບຸໄວ້ເພື່ອໃຫ້ສົມບູນກວ່າກັບຂະບວນການ. ຄຳ ສັ່ງຂ້າສາມາດປະຕິບັດໄດ້ໃນຫລາຍໆດ້ານ, ໂດຍກົງຫລືຈາກ ຄຳ ສັ່ງຫອຍ.

ການໃຊ້ ຄຳ ສັ່ງ kill ຈາກ/usr/bin ໃຫ້ຄຸນລັກສະນະພິເສດບາງຢ່າງເພື່ອຂ້າຂະບວນການໂດຍຊື່ຂັ້ນຕອນໂດຍໃຊ້ pkill.

syntax ທົ່ວໄປ ສຳ ລັບ ຄຳ ສັ່ງ kill ແມ່ນ:

# kill [signal or option] PID(s)

ສຳ ລັບ ຄຳ ສັ່ງຂ້າຊື່ສັນຍານອາດຈະແມ່ນ:

Signal Name		Signal Value			Behaviour

SIGHUP			      1				Hangup
SIGKILL			      9				Kill Signal
SIGTERM			      15			Terminate

ຢ່າງຊັດເຈນຈາກພຶດຕິ ກຳ ທີ່ຢູ່ຂ້າງເທິງ SIGTERM ແມ່ນວິທີການທີ່ບໍ່ມີເຫດຜົນແລະປອດໄພທີ່ສຸດໃນການຂ້າຂັ້ນຕອນ. SIGHUP ແມ່ນວິທີທີ່ປອດໄພ ໜ້ອຍ ກວ່າການຂ້າຂະບວນການຄື SIGTERM. SIGKILL ແມ່ນວິທີທີ່ບໍ່ປອດໄພທີ່ສຸດໃນສາມວິທີຂ້າງເທິງ, ເພື່ອຂ້າຂັ້ນຕອນ ໜຶ່ງ ທີ່ຈະສິ້ນສຸດຂະບວນການໂດຍບໍ່ປະຢັດ.

ເພື່ອຈະຂ້າຂະບວນການ ໜຶ່ງ, ພວກເຮົາຕ້ອງຮູ້ລະຫັດ Process ຂອງຂັ້ນຕອນໃດ ໜຶ່ງ. Process ແມ່ນຕົວຢ່າງຂອງໂປແກຼມ. ທຸກໆຄັ້ງທີ່ໂຄງການເລີ່ມຕົ້ນ, PID ອັດຕະໂນມັດຈະຖືກສ້າງຂື້ນໂດຍອັດຕະໂນມັດ ສຳ ລັບຂະບວນການນັ້ນ.

ທຸກໆ Process ໃນ Linux, ມີໃບ pid. ຂັ້ນຕອນ ທຳ ອິດທີ່ເລີ່ມຕົ້ນເມື່ອ Linux System ຖືກເລີ່ມຕົ້ນແມ່ນ - init process, ເພາະສະນັ້ນມັນຖືກມອບ ໝາຍ ໃຫ້ມີຄ່າ 1 'ໃນກໍລະນີສ່ວນໃຫຍ່

Init ແມ່ນຂະບວນການແມ່ບົດແລະບໍ່ສາມາດຂ້າແບບນີ້ໄດ້, ເຊິ່ງຮັບປະກັນວ່າຂະບວນການແມ່ບົດບໍ່ໄດ້ຖືກຂ້າໂດຍບັງເອີນ. Init ຕັດສິນໃຈແລະອະນຸຍາດໃຫ້ຕົວເອງຖືກຂ້າ, ບ່ອນທີ່ການຂ້າຕົວຕາຍແມ່ນພຽງແຕ່ການຮ້ອງຂໍໃຫ້ມີການປິດ.

ເພື່ອຮູ້ຂັ້ນຕອນທັງ ໝົດ ແລະກົງກັນກັບ pid ທີ່ຖືກມອບ ໝາຍ ຂອງພວກເຂົາ, ໃຫ້ເຮັດຕາມ ຄຳ ສັ່ງ ps ຕໍ່ໄປນີ້.

# ps -A
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

ແນວໃດກ່ຽວກັບການປັບແຕ່ງຜົນໄດ້ຮັບຂ້າງເທິງໂດຍໃຊ້ syntax ເປັນ 'ຂະບວນການ pidof'.

# pidof mysqld
1684

ອີກວິທີ ໜຶ່ງ ທີ່ຈະບັນລຸເປົ້າ ໝາຍ ຂ້າງເທິງແມ່ນການປະຕິບັດຕາມ ຄຳ ສັບລຸ່ມນີ້.

# ps aux | grep mysqld
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

ກ່ອນທີ່ພວກເຮົາຈະກ້າວໄປ ໜ້າ ແລະປະຕິບັດ ຄຳ ສັ່ງຂ້າ, ບາງຈຸດ ສຳ ຄັນທີ່ຕ້ອງໄດ້ຍົກໃຫ້ເຫັນ:

<

  • ຜູ້ໃຊ້ສາມາດຂ້າທຸກຂັ້ນຕອນຂອງລາວ.
  • ຜູ້ໃຊ້ບໍ່ສາມາດຂ້າຂະບວນການຂອງຜູ້ໃຊ້ຄົນອື່ນໄດ້.
  • ຜູ້ໃຊ້ບໍ່ສາມາດຂ້າຂັ້ນຕອນຕ່າງໆທີ່ລະບົບ ກຳ ລັງໃຊ້.
  • ຜູ້ໃຊ້ຮາກສາມາດຂ້າລະບົບຂັ້ນຕອນລະບົບແລະຂັ້ນຕອນຂອງຜູ້ໃຊ້ໃດ ໜຶ່ງ.
  • ອີກວິທີ ໜຶ່ງ ທີ່ເຮັດ ໜ້າ ທີ່ດຽວກັນຄືການປະຕິບັດ ຄຳ ສັ່ງ 'pgrep'.

    # pgrep mysql
    3139

    ເພື່ອຂ້າຂັ້ນຕອນຂ້າງເທິງ PID, ໃຫ້ໃຊ້ ຄຳ ສັ່ງ kill ດັ່ງທີ່ສະແດງໄວ້.

    kill -9 3139

    ຄຳ ສັ່ງຂ້າງເທິງຈະຂ້າຂະບວນການທີ່ມີ pid = 3139, ເຊິ່ງ PID ແມ່ນຕົວເລກມູນຄ່າຂອງຂະບວນການ.

    ອີກວິທີ ໜຶ່ງ ທີ່ຈະເຮັດ ໜ້າ ທີ່ດຽວກັນ, ສາມາດຂຽນ ໃໝ່ ໄດ້ຄືກັນ.

    # kill -SIGTERM 3139

    ຄ້າຍຄືກັນ 'kill -9 PID' ແມ່ນຄ້າຍຄືກັບ 'ຂ້າ -SIGKILL PID' ແລະໃນທາງກັບກັນ.

    ທ່ານຕ້ອງມີສະຕິລະວັງຕົວກ່ຽວກັບຊື່ຂອງຂະບວນການ, ກ່ອນຈະຂ້າແລະໃສ່ຊື່ຂະບວນການທີ່ບໍ່ຖືກຕ້ອງອາດເຮັດໃຫ້ທ່ານເບື່ອ ໜ່າຍ.

    # pkill mysqld

    ຂ້າຫຼາຍກ່ວາ ໜຶ່ງ ຂັ້ນຕອນໃນແຕ່ລະຄັ້ງ.

    # kill PID1 PID2 PID3
    
    or
    
    # kill -9 PID1 PID2 PID3
    
    or
    
    # kill -SIGKILL PID1 PID2 PID3

    ຈະເປັນແນວໃດຖ້າວ່າຂະບວນການ ໜຶ່ງ ມີຫຼາຍກໍລະນີແລະຂະບວນການ ຈຳ ນວນ ໜຶ່ງ ຂອງເດັກ, ພວກເຮົາມີ ຄຳ ສັ່ງ“ killall”. ນີ້ແມ່ນ ຄຳ ສັ່ງດຽວຂອງຄອບຄົວນີ້, ເຊິ່ງໃຊ້ຊື່ຂະບວນການເປັນການໂຕ້ຖຽງໃນສະຖານທີ່ຂອງ ຈຳ ນວນຂັ້ນຕອນ.

    # killall [signal or option] Process Name

    ເພື່ອຂ້າທຸກກໍລະນີ mysql ພ້ອມກັບຂະບວນການຂອງເດັກ, ໃຊ້ ຄຳ ສັ່ງດັ່ງຕໍ່ໄປນີ້.

    # killall mysqld

    ທ່ານສາມາດກວດສອບສະຖານະຂອງຂະບວນການໄດ້ສະ ເໝີ ຖ້າມັນ ກຳ ລັງເຮັດວຽກຢູ່ຫຼືບໍ່, ໂດຍໃຊ້ ຄຳ ສັ່ງຂ້າງລຸ່ມໃດ ໜຶ່ງ.

    # service mysql status
    # pgrep mysql
    # ps -aux | grep mysql

    ທັງ ໝົດ ນີ້ແມ່ນມາຈາກຂ້າງຂ້ອຍ. ໃນໄວໆນີ້ຂ້ອຍຈະມາອີກເທື່ອ ໜຶ່ງ ດ້ວຍຫົວຂໍ້ທີ່ ໜ້າ ສົນໃຈແລະໃຫ້ຂໍ້ມູນອີກ. ຈົນກ່ວານັ້ນ, ຕິດຕາມ, ເຊື່ອມຕໍ່ກັບ Tecmint ແລະສຸຂະພາບດີ. ຢ່າລືມໃຫ້ ຄຳ ຕິຊົມທີ່ມີຄຸນຄ່າຂອງທ່ານໃນພາກ ຄຳ ເຫັນ.