3 ví dụ về lệnh Kill trên Centos / Ubuntu / Debian / Fedora

Hệ điều hành Linux đi kèm với lệnh kill để kết thúc một quá trình. Lệnh này giúp tiếp tục chạy máy chủ mà không cần khởi động lại sau một thay đổi/cập nhật quan trọng. Đây là một trong những lý do tuyệt vời của Linux và là một trong những lý do tại sao Linux đang chạy trên 96,4% máy chủ trên hành tinh.

Kill gửi một tín hiệu, tín hiệu được chỉ định tới một quá trình đang chạy. Đồng thời, lệnh này có thể được thực hiện theo nhiều cách, trực tiếp hoặc từ một script shell. Sử dụng lệnh “kill” từ /usr/bin cung cấp cho bạn một số tính năng bổ sung để kết thúc một quá trình theo tên quá trình bằng cách sử dụng pkill.

Cú pháp cơ bản của lệnh kill

Cú pháp chung của lệnh kill:

# kill [signal or option] PID(s)

Trong lệnh kill, tên tín hiệu có thể là:

Signal Name Signal Value Behaviour

SIGHUP       1 Hangup
SIGKILL       9 Kill Signal
SIGTERM       15 Terminate

Rõ ràng từ hành vi ở trên, SIGTERM là cách mặc định và an toàn nhất để kết thúc một quá trình. SIGHUP là cách kết thúc quá trình ít an toàn hơn so với SIGTERM. SIGKILL là cách không an toàn nhất trong ba tùy chọn trên để kết thúc một quá trình mà không lưu dữ liệu.

Để kết thúc một quá trình, chúng ta cần biết Process ID (PID) của quá trình đó. Mỗi quá trình là một phiên bản của một chương trình. Mỗi khi một chương trình bắt đầu, một PID duy nhất được tạo ra tự động cho quá trình đó.

Mỗi quá trình trong Linux có một PID. Quá trình đầu tiên được khởi động khi hệ thống Linux được khởi động là quá trình "init", vì vậy nó được gán một giá trị '1' trong hầu hết các trường hợp.

Quá trình "init" là quá trình chủ và không thể bị kết thúc bằng cách này, điều này đảm bảo rằng quá trình chủ không bị kết thúc một cách tình cờ. Quá trình "init" tự quyết định và cho phép chính nó bị kết thúc, trong đó lệnh kill chỉ là yêu cầu để tắt nguồn.

Cách sử dụng lệnh kill trong Linux

Liệt kê tất cả các quy trình Linux đang chạy

Để biết tất cả các quá trình và tương ứng với PID được gán, chạy lệnh ps sau đây.

# ps -A

Mẫu đầu ra:

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

Cách tùy chỉnh đầu ra trên bằng cú pháp 'pidof quá trình'.

# pidof mysqld

Mẫu đầu ra:

1684

Một cách khác để đạt được mục tiêu trên là tuân theo cú pháp sau đây.

# ps aux | grep mysqld

Mẫu đầu ra:

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

Cách kết thúc một tiến trình trong Linux

Trước khi tiến hành thực hiện lệnh kill, có một số điểm quan trọng cần lưu ý:

  • Một người dùng có thể kết thúc tất cả các quá trình của mình.
  • Một người dùng không thể kết thúc quá trình của người dùng khác.
  • Một người dùng không thể kết thúc các quá trình mà Hệ thống đang sử dụng.
  • Một người dùng root có thể kết thúc các quá trình cấp Hệ thống và quá trình của bất kỳ người dùng nào.

Một cách khác để thực hiện chức năng tương tự là thực thi lệnh 'pgrep'.

# pgrep mysql

Mẫu đầu ra:

3139

Để kết thúc quá trình với PID đã nêu ở trên, sử dụng lệnh kill như sau:

kill -9 3139

Lệnh trên sẽ kết thúc quá trình có PID=3139, trong đó PID là một giá trị số của quá trình.

Một cách khác để thực hiện chức năng tương tự có thể được viết lại như sau.

# kill -SIGTERM 3139

Tương tự, 'kill -9 PID' tương đương với 'kill -SIGKILL PID' và ngược lại.

Cách kết thúc một tiến trình trong Linux bằng tên tiến trình

Bạn phải biết tên quá trình trước khi kết thúc nó và nhập sai tên quá trình có thể gây rối.

# pkill mysqld

Kết thúc nhiều quá trình cùng một lúc.

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

Trường hợp một quá trình có quá nhiều phiên bản và một số quá trình con, chúng ta có hai lệnh là 'killall' hoặc 'pkill'. Đây là hai lệnh duy nhất trong nhóm lệnh này, chấp nhận tên quá trình là đối số thay vì số PID.

Cú pháp:

# killall [signal or option] Process Name
Or
# pkill Process Name

Để kết thúc tất cả các phiên bản của mysql cùng với các quá trình con, sử dụng lệnh sau:

# killall mysqld
OR
# pkill mysqld

Bạn luôn có thể xác minh trạng thái của quá trình xem nó đang chạy hay không bằng cách sử dụng một trong các lệnh sau đây:

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

Bên trên là những công dụng thường dùng của lệnh kill trong Linux, người mới bắt đầu có thể làm theo những ví dụ này để kết thúc tiến trình như mong muốn.

Mọi người cũng tìm kiếm: kill ubuntu