Cách loại bỏ quy trình trong Linux bằng kill, killall và pkill – GeekPeach.net

Quy trình là gì?

Một tiến trình, còn được gọi là một nhiệm vụ, là dạng chạy của một chương trình. Các chương trình được lưu trữ trên đĩa và các tiến trình chạy trong bộ nhớ. Các quy trình có mối quan hệ cha / con. Một tiến trình có thể sinh ra một hoặc nhiều con. Nhiều quy trình có thể chạy song song.

Quy trình hệ thống danh sách

Lệnh trạng thái quy trình (ps) liệt kê các quy trình được liên kết với trình bao của bạn.

Đối với mỗi quá trình, lệnh ps hiển thị PIDmã định danh đầu cuối (TTY), thời gian thực hiện tích lũy (TIME), và tên lệnh (CMD). Ví dụ: liệt kê các tiến trình hiện đang chạy trên hệ thống bằng lệnh ps.

# ps
  PID TTY          TIME CMD
 1442 pts/1    00:00:00 sudo
 1448 pts/1    00:00:00 su
 1449 pts/1    00:00:00 bash
 1666 pts/1    00:00:00 ps

Lệnh ps có một số tùy chọn mà bạn có thể sử dụng để hiển thị thông tin quy trình bổ sung.

  • -a: In thông tin về tất cả các quy trình được yêu cầu thường xuyên nhất, ngoại trừ các nhà lãnh đạo nhóm quy trình và các quy trình không được liên kết với thiết bị đầu cuối
  • -e: In thông tin về mọi quy trình hiện đang chạy
  • -f: Tạo danh sách đầy đủ
  • -l: Tạo một danh sách dài
  • -o format: Ghi thông tin theo đặc tả định dạng được đưa ra trong một định dạng. Nhiều tùy chọn -o có thể được chỉ định. Đặc tả định dạng được hiểu là sự ghép nối được phân tách bằng dấu cách của tất cả các đối số tùy chọn định dạng.

Liệt kê tất cả các quy trình

Ví dụ, sử dụng ‘ps -ef‘để liệt kê tất cả các tiến trình hiện đang được lên lịch chạy trên hệ thống.

  • UID: Tên người dùng của chủ sở hữu quy trình
  • PID: Số nhận dạng quy trình duy nhất của quy trình
  • PPID: Số nhận dạng quy trình mẹ của quy trình
  • STIME: Thời gian quá trình bắt đầu (hh: mm: ss)
  • TTY: Thiết bị đầu cuối kiểm soát quá trình. Lưu ý rằng các quy trình hệ thống (daemon) hiển thị dấu chấm hỏi (?), Cho biết quy trình đã bắt đầu mà không sử dụng thiết bị đầu cuối.
  • TIME: Thời gian thực hiện tích lũy cho quy trình
  • CMD: Tên lệnh, tùy chọn và đối số

Chấm dứt một quy trình

Có thể có những lúc bạn cần phải chấm dứt một quy trình không mong muốn. Một quá trình có thể đã đi vào một vòng lặp vô tận, hoặc nó có thể đã bị treo. Bạn có thể giết hoặc dừng bất kỳ quá trình nào mà bạn sở hữu. Bạn có thể sử dụng hai lệnh sau để chấm dứt một hoặc nhiều quy trình:
– kill
– pkill

Các lệnh kill và pkill gửi tín hiệu đến các quá trình chỉ đạo chúng kết thúc. Mỗi tín hiệu có một số, tên và một sự kiện liên quan. Dưới đây là một số tín hiệu được sử dụng phổ biến nhất với các chức năng của chúng.

Con số
Tên
Mô tả

1
LOG IN
Tải lại tệp cấu hình

2
SIGINT
Ngắt bằng bàn phím (ctrl + c)

9
SIGKILL
quá trình giết

15
SIGTERM
Kết thúc quy trình ngay lập tức. (Chấm dứt một quy trình theo cách có kiểm soát để có thể làm sạch)

18
SIGCONT
Tiếp tục quá trình đã dừng với STOP

19
STOP
Dừng quá trình

Lưu ý: Có những quy trình không nên chấm dứt, chẳng hạn như init. Việc giết các quy trình như vậy có thể dẫn đến sự cố hệ thống. Một người dùng có thể chấm dứt bất kỳ quá trình nào trong hệ thống.

Chấm dứt một tiến trình bằng lệnh kill

Bạn có thể chấm dứt bất kỳ quá trình nào bằng cách phát tín hiệu thích hợp cho quá trình liên quan. Lệnh hủy gửi tín hiệu 15, tín hiệu kết thúc, theo mặc định. Tín hiệu này làm cho quá trình kết thúc một cách có trật tự. Lệnh kill gửi một tín hiệu kết thúc đến một hoặc nhiều tiến trình.

Lưu ý: Lệnh kill chỉ chấm dứt những tiến trình mà bạn sở hữu. Người dùng root có thể sử dụng lệnh kill trên bất kỳ quá trình nào.

Bạn cần biết PID của quy trình trước khi có thể chấm dứt nó. Bạn có thể sử dụng lệnh ps hoặc pgrep để định vị PID của quá trình. Ngoài ra, bạn có thể kết thúc nhiều quá trình cùng một lúc bằng cách nhập nhiều PID trên một dòng lệnh. Hãy xem một ví dụ về lệnh kill. Chúng tôi sẽ chấm dứt quá trình ‘sleep 400’ như hình dưới đây.

# ps -ef | grep sleep
root      1337  1218  0 07:33 pts/0    00:00:00 sleep 400

Chấm dứt một tiến trình bằng lệnh pkill hoặc killall

Ngoài ra, bạn có thể sử dụng lệnh pkill hoặc killall để gửi tín hiệu kết thúc tới các tiến trình.

hoặc

# killall [-options] PIDs

Lệnh pkill / killall yêu cầu bạn chỉ định tên thay vì PID của quy trình. Ví dụ: sử dụng lệnh pkill để kết thúc quá trình dtmail.

# pkill dtmail 
# pgrep -l mail
#

Buộc chấm dứt một quá trình: Tín hiệu 9

Một số tiến trình bỏ qua tín hiệu mặc định 15 mà lệnh kill gửi đi. Nếu một quá trình không phản hồi tín hiệu 15, bạn có thể buộc nó kết thúc bằng cách sử dụng tín hiệu 9 với lệnh kill hoặc pkill.

Lưu ý: Việc gửi tín hiệu 15 không chấm dứt một quá trình một cách triệt để. Chỉ khi tín hiệu được bắt bởi quy trình, nó sẽ tự làm sạch theo thứ tự và chấm dứt. Nếu không, nó chỉ được chấm dứt.

Trên đây là toàn bộ nội dung của bài viết. Mong rằng bạn sẽ lựa chọn được giải pháp phù hợp nhất với mình. Nếu có bất cứ thắc mắc nào, vui lòng để lại comment để chúng tôi giải đáp nhanh nhất nhé! Cảm ơn bạn!