Lệnh killall của Linux dành cho người mới bắt đầu (8 ví dụ)

theanh

Administrator
Nhân viên
Chúng tôi đã thảo luận về lệnh kill của Linux mà bạn có thể sử dụng trong trường hợp bạn muốn chấm dứt các tiến trình trong Linux. Tuy nhiên, có một tiện ích dòng lệnh khác mà bạn có thể sử dụng cho cùng mục đích: killall. Trong hướng dẫn này, chúng tôi sẽ thảo luận về những điều cơ bản của lệnh này bằng một số ví dụ dễ hiểu.

Nhưng trước khi thực hiện, cần đề cập rằng tất cả các ví dụ có trong hướng dẫn này đều đã được thử nghiệm trên Ubuntu 22.04 LTS.

Lệnh killall của Linux​

Lệnh killall cho phép bạn chấm dứt các tiến trình theo tên. Sau đây là cú pháp của công cụ:
Mã:
killall [OPTIONS] name
Và đây là cách trang hướng dẫn giải thích về công cụ:
Mã:
killall gửi tín hiệu đến tất cả các quy trình đang chạy bất kỳ lệnh nào được chỉ định. Nếu không chỉ định tên tín hiệu, SIGTERM sẽ được gửi. Tín hiệu có thể được chỉ định theo tên (ví dụ: -HUP hoặc -SIGHUP) hoặc theo số (ví dụ: -1) hoặc theo tùy chọn -s.

Nếu tên lệnh không phải là biểu thức chính quy (tùy chọn -r) và chứa dấu gạch chéo (/), các tiến trình thực thi tệp cụ thể đó sẽ được chọn để hủy, bất kể tên của chúng.

killall trả về mã trả về bằng không nếu ít nhất một tiến trình đã bị hủy đối với mỗi lệnh được liệt kê hoặc không có lệnh nào được liệt kê và ít nhất một tiến trình khớp với tiêu chí tìm kiếm -u và -Z. killall trả về giá trị khác không nếu không.

Một tiến trình killall không bao giờ tự hủy (nhưng có thể hủy các tiến trình killall khác).
Các ví dụ theo kiểu Hỏi & Đáp sau đây sẽ giúp bạn hiểu rõ hơn về cách lệnh killall hoạt động.


Câu hỏi 1. Làm thế nào để sử dụng lệnh killall?​

Công cụ này có cách sử dụng cơ bản rất dễ - tất cả những gì bạn phải làm là truyền tên của tiến trình làm đối số cho killall. Ví dụ, để giết tiến trình gthumb đang chạy trên hệ thống của tôi, tôi đã sử dụng killall theo cách sau:
Mã:
killall gthumb
Lưu ý rằng trong trường hợp bạn không biết tên chính xác của tiến trình, bạn có thể sử dụng lệnh ps để lấy thông tin này.

Câu hỏi 2. Killall có phân biệt chữ hoa chữ thường không?​

Có. Nó sẽ trả về lỗi 'không tìm thấy tiến trình' nếu người dùng không viết đúng chữ hoa chữ thường tên tiến trình. Sau đây là một ví dụ:



Tuy nhiên, nếu muốn, bạn có thể buộc lệnh killall bỏ qua chữ hoa chữ thường bằng tùy chọn dòng lệnh -I.


Câu hỏi 3. Làm thế nào để lệnh killall hỏi trước khi kết thúc tiến trình?​

Giả sử bạn muốn lệnh killall yêu cầu quyền của người dùng trước khi kết thúc một tiến trình, thì bạn có thể sử dụng tùy chọn dòng lệnh -i. Điều này sẽ làm cho hoạt động killall trở nên tương tác.

Ví dụ:


Câu hỏi 4. Làm thế nào để chọn tín hiệu killall gửi đến tiến trình?​

Theo mặc định, đó là tín hiệu SIGTERM mà killall gửi đến các tiến trình. Tuy nhiên, bạn cũng có thể gửi các tín hiệu khác. Bạn có thể sử dụng các tùy chọn-s, --signal-SIGNAL để gửi các tín hiệu khác này.

Tuy nhiên, để điều này hoạt động, bạn cần biết tất cả các tín hiệu mà lệnh killall có thể gửi. Bạn có thể làm điều này bằng cách sử dụng tùy chọn dòng lệnh -l.
Mã:
killall -l
Sau đây là danh sách lệnh đã đề cập ở trên được tạo ra trên hệ thống của chúng tôi:


Câu hỏi 5. Làm thế nào để ngăn chặn killall phàn nàn nếu quy trình được chỉ định không tồn tại?​

Nếu quy trình có tên được truyền cho "killall" không chạy (không tồn tại), thì công cụ sẽ truyền đạt điều này cho người dùng trong đầu ra.



Tuy nhiên, nếu bạn không muốn công cụ tạo ra đầu ra như vậy, thì bạn có thể sử dụng tùy chọn dòng lệnh -q.



Vì vậy, bạn có thể thấy lệnh killall vẫn im lặng khi sử dụng -q.

Câu hỏi 6. Làm thế nào để giết tất cả các quy trình do người dùng sở hữu?​

Nếu yêu cầu là giết tất cả các quy trình mà một người dùng cụ thể sở hữu, thì bạn có thể sử dụng tùy chọn -u do killall cung cấp. Không cần phải nói, tùy chọn này yêu cầu bạn phải chỉ định tên người dùng cho người dùng làm đầu vào của nó.
Mã:
killall -u [user-name]
Ví dụ:
Mã:
killall -u himanshu

Câu hỏi 7. Làm thế nào để tắt các tiến trình dựa trên thời gian?​

Giả sử bạn muốn tắt tất cả các tiến trình đã chạy trong hơn 5 giờ, thì bạn có thể thực hiện việc này bằng tùy chọn -o theo cách sau:
Mã:
killall -o 5h
Tất nhiên, bạn có thể chỉ định tên tiến trình nếu bạn không muốn tắt tất cả các tiến trình. Tương tự, nếu bạn muốn tắt các tiến trình có tuổi đời dưới 4 giờ, thì bạn có thể thực hiện việc này bằng tùy chọn dòng lệnh -y.
Mã:
killall -y 4h
Đây là cách trang hướng dẫn giải thích các tùy chọn này:
Mã:
-o, --older-than
 Chỉ khớp với các tiến trình cũ hơn (bắt đầu trước) thời gian
 đã chỉ định. Thời gian được chỉ định dưới dạng số thực rồi đến đơn vị. Các đơn vị 
 là s, m, h, d, w, M, y tương ứng với giây, phút, giờ, ngày, tuần, tháng và năm. 

-y, --younger-than
 Chỉ khớp với các quy trình trẻ hơn (bắt đầu sau) thời gian 
 được chỉ định. Thời gian được chỉ định là một số thực rồi là một đơn vị. Các đơn vị 
 là s, m, h, d, w, M, y tương ứng với giây, phút, giờ, ngày, tuần, tháng và năm.

Câu 8. Làm thế nào để đảm bảo killall chỉ trả về sau khi các tiến trình chết?​

Sau khi tín hiệu được truyền đến tiến trình bởi killall, nếu bạn muốn đảm bảo lệnh chỉ trả về sau khi tiến trình chết, thì bạn có thể thực hiện việc này bằng tùy chọn dòng lệnh -w, tùy chọn này buộc killall phải đợi.
Mã:
killall -w [process-name]
Đây là cách trang hướng dẫn mô tả tùy chọn này:
Mã:
-w, --wait
 Đợi tất cả các tiến trình đã chết chết. killall kiểm tra một lần mỗi
 giây xem có bất kỳ tiến trình đã chết nào vẫn tồn tại không và chỉ
 trả về nếu không còn tiến trình nào. Lưu ý rằng killall có thể đợi mãi nếu
 tín hiệu bị bỏ qua, không có tác dụng hoặc nếu tiến trình vẫn
 ở trạng thái zombie.

Kết luận​

Killall có thể không phải là một việc dễ dàng đối với người mới bắt đầu, nhưng nó cũng không quá phức tạp. Bạn cần thực hành các tùy chọn dòng lệnh mà nó cung cấp. Chúng tôi đã thảo luận về phần lớn các lệnh này, vì vậy hướng dẫn này sẽ là điểm khởi đầu tốt. Khi bạn đã hoàn thành các lệnh này, bạn có thể đọc thêm về lệnh bằng cách chuyển đến trang hướng dẫn của lệnh đó.
 
Back
Bên trên