Lệnh killall: dừng tiến trình theo tên, tín hiệu -9 và cài đặt psmisc

Môi trường thử nghiệmHọ RHELAlmaLinux 9.8psmisc 23.4Tài khoản rootDebian 12 · psmisc 23.6 Tài khoản thường (chạy killall)
Lệnh tiến trình · lập lịch tác vụkillallVị trí/usr/bin/killallKiểm tra ngày 2026-11-03

Lệnh killall là lệnh Linux chọn các tiến trình đang chạy theo tên chương trình thay vì số tiến trình (PID) rồi gửi tín hiệu cho chúng; nếu bạn không chỉ định tín hiệu, lệnh sẽ gửi SIGTERM (theo tài liệu chính thức). Vì lệnh này dừng cùng lúc mọi tiến trình có cùng tên, trên máy chủ AlmaLinux 9 chúng tôi đã kiểm tra trước bằng pgrep và ps bốn tiến trình chạy từ các bản sao của sleep mang tên khác; với tệp thực thi có tên dài hơn 15 ký tự, tên tiến trình chỉ còn 15 ký tự đầu.

Chúng tôi chỉ chạy killall trên các tiến trình xxsleep được khởi động để thử nghiệm bằng tài khoản thường trên máy chủ Debian 12. Các hộp kết quả là đầu ra của rpm, pgrep, ps, pidof, cat và kill chạy bằng tài khoản root trên máy chủ AlmaLinux 9.8, và đầu ra của killall chạy trên máy chủ Debian 12. Số tiến trình (PID), tên tiến trình, đường dẫn tệp thực thi và tên tài khoản đã được thay bằng giá trị ví dụ.

1️⃣ Cài đặt lệnh killall

  • ↪️ Gói psmisc và kiểm tra phiên bản

killall nằm trong gói psmisc. Khi kiểm tra bằng rpm trên máy chủ AlmaLinux 9.8 xem /usr/bin/killall thuộc gói nào, kết quả là phiên bản psmisc 23.4.

rpm -qf --qf '%{NAME} %{VERSION}\n' /usr/bin/killall
psmisc 23.4

Danh sách tệp của cùng gói đó, xem bằng rpm -ql, cũng có pstree và fuser.

Nếu xuất hiện [command not found], tức là không tìm thấy lệnh, hãy cài gói psmisc. Họ RHEL dùng [dnf install psmisc], còn họ Debian dùng [apt install psmisc]. Máy chủ Debian 12 đã cài sẵn psmisc 23.6, và killall nằm ở /usr/bin/killall.

Khi kiểm tra trên máy chủ AlmaLinux 9.8, pkill có tên gần giống nằm trong gói procps-ng, còn kill là lệnh tích hợp sẵn của shell.

2️⃣ Cách dùng lệnh killall

  • ↪️ Kiểm tra đối tượng theo tên tiến trình

Dạng cơ bản là [killall tên tiến trình]. Lệnh tìm mọi tiến trình đang chạy với tên đã cho rồi gửi tín hiệu; nếu bạn ghi nhiều tên, lệnh làm điều tương tự cho từng tên (theo tài liệu chính thức).

Vì các tiến trình cùng tên đều dừng cùng lúc, hãy kiểm tra trước bằng pgrep xem có gì đang chạy với tên đó. Chúng tôi sao chép sleep vào thư mục làm việc với các tên xxsleep-a1, xxsleep-a2 và xxsleep-longname-x1, chạy xxsleep-a1 hai lần, tổng cộng bốn tiến trình, rồi in số và tên bằng -l.

pgrep -l xxsleep
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2
2155 xxsleep-longnam

Ở dòng thứ tư, tệp thực thi tên là xxsleep-longname-x1, nhưng tên tiến trình bị cắt ở xxsleep-longnam.

Thêm -a sẽ hiện toàn bộ dòng lệnh đã chạy. Hai xxsleep-a1 cùng tên được phân biệt bằng đối số giây ở cuối, 300 và 310.

pgrep -a xxsleep
2141 /root/work/xxsleep-a1 300
2142 /root/work/xxsleep-a1 310
2150 /root/work/xxsleep-a2 320
2155 /root/work/xxsleep-longname-x1 330

Để chỉ tìm các tiến trình có tên khớp chính xác, hãy thêm -x. Kết quả với xxsleep-a1 là hai số.

pgrep -x xxsleep-a1
2141
2142

Để chỉ kiểm tra số bằng cách nhập nguyên một tên, hãy dùng pidof. Khi tìm xxsleep-a1, hai số hiện trên cùng một dòng.

pidof xxsleep-a1
2142 2141

ps chỉ in các tiến trình có tên khớp chính xác khi bạn ghi nhiều tên cách nhau bằng dấu phẩy sau -C.

ps -o pid,comm -C xxsleep-a1,xxsleep-a2
    PID COMMAND
   2141 xxsleep-a1
   2142 xxsleep-a1
   2150 xxsleep-a2

Trên máy chủ Debian 12, chúng tôi khởi động bốn tiến trình với cùng các tên rồi chạy [killall xxsleep-a1]: lệnh không in gì và kết thúc với mã thoát 0. Khi tìm lại bằng pgrep, hai xxsleep-a1 đã biến mất, chỉ còn xxsleep-a2 và xxsleep-longname-x1. Nếu bạn ghi đường dẫn có dấu gạch chéo (/) thay cho tên, lệnh sẽ chọn các tiến trình đang chạy tệp đó bất kể tên (theo tài liệu chính thức).

Khi ghi tên không tồn tại xxsleep-zz, xuất hiện một dòng có [no process found] sau tên và kết thúc với mã thoát 1. Mã thoát chỉ là 0 khi với mỗi tên đã ghi có ít nhất một tiến trình bị dừng (theo tài liệu chính thức).

killall xxsleep-zz
xxsleep-zz: no process found

Khi chỉ muốn dừng một tiến trình đã biết số, hãy gửi tín hiệu chỉ đến số đó bằng kill: Lệnh kill của Linux.

3️⃣ Tùy chọn của lệnh killall

  • ↪️ -e và tên 15 ký tự, -i, -v, -u, -r

Khi đọc tên của tiến trình khởi động bằng xxsleep-longname-x1 từ /proc/PID/comm, chỉ còn 15 ký tự đầu là xxsleep-longnam.

cat /proc/2155/comm
xxsleep-longnam

Chúng tôi chạy pgrep với xxsleep-longname dài 16 ký tự.

pgrep -a xxsleep-longname

Lệnh kết thúc không có đầu ra với mã thoát 1, và khi tìm lại bằng xxsleep-longnam dài 15 ký tự thì tiến trình đó xuất hiện.

pgrep -l xxsleep-longnam
2155 xxsleep-longnam

Khi killall nhận tên dài hơn 15 ký tự và có tiến trình mà nó không đọc được tên đầy đủ, mọi tiến trình khớp 15 ký tự đầu đều thành đối tượng; thêm -e thì các mục đó bị bỏ qua (theo tài liệu chính thức). Trên máy chủ Debian 12, khi ghi 15 ký tự đầu xxsleep-longnam kèm -e và -v, xuất hiện các dòng cho biết đã bỏ qua ba tiến trình khác có tên bị cắt ở 15 ký tự, rồi kết thúc bằng [no process found].

killall -e -v xxsleep-longnam
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
xxsleep-longnam: no process found

Khi ghi tên đầy đủ xxsleep-longname-x1, sau các dòng bỏ qua giống hệt là một dòng cho biết đã gửi tín hiệu đến tiến trình đó.

killall -e -v xxsleep-longname-x1
killall: skipping partial match quota_events_un(37)
killall: skipping partial match acpi_thermal_pm(112)
killall: skipping partial match ext4-rsv-conver(246)
Killed xxsleep-longname-x1(2155) with signal 15

Khi thêm -v, với mỗi tiến trình được gửi tín hiệu sẽ có một dòng chứa tên, số và số tín hiệu.

killall -v xxsleep-a2
Killed xxsleep-a2(2150) with signal 15

-i hỏi từng tiến trình có dừng hay không. Chúng tôi khởi động lại hai xxsleep-a1 và lần lượt đưa y và n qua đầu vào chuẩn: hai câu hỏi hiện nối tiếp trên một dòng, chỉ xxsleep-a1 thứ nhất dừng, còn cái thứ hai vẫn chạy.

printf 'y\nn\n' | killall -i xxsleep-a1
Kill xxsleep-a1(2171) ? (y/N) Kill xxsleep-a1(2172) ? (y/N)

-u chỉ chọn các tiến trình thuộc sở hữu của tài khoản đó, và nếu bỏ tên thì toàn bộ tiến trình của tài khoản đó là đối tượng. Khi ghi thêm xxsleep-a1 sau tên tài khoản, tín hiệu chỉ được gửi đến xxsleep-a1 còn lại.

killall -v -u user xxsleep-a1
Killed xxsleep-a1(2172) with signal 15

-o và -y chọn theo thời điểm bắt đầu, còn thời gian được ghi bằng số kèm đơn vị s, m, h, d, w, M hoặc y phía sau, như [-o 30m].

-r đọc tên dưới dạng biểu thức chính quy mở rộng. Khi đưa mẫu ^xxsleep-a vào pgrep, có ba tiến trình bắt đầu bằng xxsleep-a xuất hiện.

pgrep -l '^xxsleep-a'
2141 xxsleep-a1
2142 xxsleep-a1
2150 xxsleep-a2

-w chờ, kiểm tra mỗi giây, cho đến khi mọi tiến trình đã được gửi tín hiệu biến mất. Nếu tiến trình bỏ qua tín hiệu hoặc còn lại ở trạng thái zombie, việc chờ có thể không bao giờ kết thúc.

Bảng đầu tiên dưới đây gồm các lệnh kiểm tra và tùy chọn killall thực sự đã chạy trong bài này, còn các tùy chọn killall chưa chạy được gom vào bảng thứ hai theo tài liệu chính thức.

📌 Kiểm tra tiến trình và killall: kết quả chạy trong bài này

LệnhChức năngKết quả trong bài này
pgrep -l tênSố và tên của các tiến trình có tên chứa chuỗi đóxxsleep cho bốn dòng; tên dài chỉ hiện đến 15 ký tự đầu là xxsleep-longnam
pgrep -a tênSố và toàn bộ dòng lệnhHai xxsleep-a1 cùng tên được phân biệt bằng đối số cuối 300 và 310
pgrep -x tênChỉ số của các tiến trình có tên khớp chính xácxxsleep-a1 cho hai dòng: 2141 và 2142
pidof tênCác số đang chạy với tên đó, trên một dòngxxsleep-a1 cho 2142 2141
ps -o pid,comm -C tênSố và tên của các tiến trình có tên khớp chính xác; nhiều tên cách nhau bằng dấu phẩyHai dòng xxsleep-a1 và một dòng xxsleep-a2
cat /proc/PID/commTên tiến trình (tối đa 15 ký tự đầu)2155 là xxsleep-longnam
killall tênSIGTERM đến các tiến trình có tên đóHai xxsleep-a1 dừng với mã thoát 0; tên không tồn tại xxsleep-zz cho no process found và mã thoát 1
killall -e tênTên dài hơn 15 ký tự chỉ khi tên đầy đủ khớpxxsleep-longnam cho no process found, xxsleep-longname-x1 dừng
killall -v tênIn kết quả cho mỗi tiến trình được gửi tín hiệuKilled xxsleep-a2(2150) with signal 15
killall -i tênHỏi xác nhận từng tiến trình trước khi dừngNhập y và n thì chỉ xxsleep-a1 thứ nhất dừng
killall -u tên tài khoảnChỉ các tiến trình thuộc sở hữu của tài khoản đóGhi cùng một tên thì chỉ xxsleep-a1 của tài khoản đó dừng
killall -9 tênSIGKILL thay cho SIGTERMKilled xxsleep-a2(2173) with signal 9

📎 Tùy chọn khác: theo tài liệu hướng dẫn chính thức

Tùy chọnChức năng
-I, --ignore-caseSo sánh tên không phân biệt chữ hoa và chữ thường
-g, --process-groupGửi tín hiệu đến nhóm tiến trình thay vì tiến trình (mỗi nhóm một lần)
-l, --listDanh sách tên tín hiệu đã biết
-n, --ns PIDChỉ các tiến trình trong cùng PID namespace với PID đó; mặc định là mọi namespace
-o, --older-than thời gianChỉ các tiến trình bắt đầu trước thời gian đó (đơn vị s, m, h, d, w, M, y)
-q, --quietKhông báo dù không có tiến trình nào bị dừng
-r, --regexpĐọc tên dưới dạng biểu thức chính quy mở rộng
-s, --signal tín hiệuTín hiệu gửi thay cho SIGTERM
-V, --versionIn thông tin phiên bản
-w, --waitChờ đến khi mọi tiến trình đã được gửi tín hiệu biến mất
-y, --younger-than thời gianChỉ các tiến trình bắt đầu sau thời gian đó
-Z, --context mẫuChỉ các tiến trình có ngữ cảnh bảo mật khớp mẫu biểu thức chính quy mở rộng; ghi trước các đối số khác; có thể bỏ tên

🔲 Trình mô phỏng lệnh killall

Trình mô phỏng dưới đây bắt đầu với danh sách bốn tiến trình xxsleep cộng thêm xxsleep-a2 của tài khoản ví dụ user1. Chạm vào các chip để so sánh dòng nào biến mất khỏi danh sách với [killall -v], [-i] và [-u]; nội dung đầu ra của killall mô phỏng theo đầu ra thu được trên máy chủ Debian 12.

Trình mô phỏng lệnh killallpsmisc 23.4
[root@server work]#
Chỉ hoạt động trong trình duyệt của bạn. Danh sách bên trái là giá trị ví dụ, còn killall là bản mô phỏng theo nội dung đầu ra thu được trên máy chủ Debian 12 và chỉ xóa dòng khỏi danh sách.

4️⃣ Tín hiệu của killall

  • ↪️ Tùy chọn -s, killall -9 và số tín hiệu

Tín hiệu cần gửi được ghi bằng tên như [-HUP] hoặc [-SIGHUP], bằng số như [-1], hoặc sau tùy chọn -s (theo tài liệu chính thức). [killall -9 tên tiến trình] gửi tín hiệu số 9 là SIGKILL. SIGKILL là tín hiệu mà tiến trình không thể bắt hay bỏ qua (theo tài liệu chính thức), nên tiến trình dừng mà không kịp dọn dẹp. Vì vậy nó được gửi khi tín hiệu mặc định SIGTERM không dừng được tiến trình.

Trên máy chủ Debian 12, khi thêm -9 cùng -v cho xxsleep-a2 được khởi động lại, xuất hiện một dòng ghi số tín hiệu 9.

killall -9 -v xxsleep-a2
Killed xxsleep-a2(2173) with signal 9

Chúng tôi kiểm tra tên và số tín hiệu bằng [kill -l]. killall cũng có tùy chọn -l in ra các tên tín hiệu mà nó biết.

kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX

Khi nhập một số, chỉ tên của tín hiệu đó xuất hiện. Số 15 mà killall gửi mặc định là TERM, còn 9 gửi bằng -9 là KILL.

kill -l 15
TERM
kill -l 9
KILL

Nếu ghi tên tín hiệu không có trong danh sách, sẽ xuất hiện thông báo dạng [FOO: unknown signal; killall -l lists signals.] (theo tài liệu chính thức và nội dung của chương trình).

🔢 FAQ & nội dung đề xuất

killall là lệnh của gói psmisc, còn pkill là lệnh của gói procps-ng, giống pgrep. pkill tìm một phần tên dưới dạng biểu thức chính quy mở rộng như pgrep, còn killall chỉ đọc tên dưới dạng biểu thức chính quy khi thêm -r (theo tài liệu chính thức).

Tài liệu chính thức của psmisc ghi rằng trên các hệ thống không phải Linux, [killall tên] có thể hoạt động khác với mong đợi, và cần đặc biệt cẩn thận khi chạy bằng tài khoản quản trị. Trên hệ thống khác, hãy kiểm tra tài liệu của hệ thống đó trước.

Số tên có thể ghi trong một lần có giới hạn, bằng kích thước của số nguyên unsigned long nhân với 8. Hệ thống 64 bit thường là 64, còn hệ thống 32 bit là 32 (theo tài liệu chính thức).

ℹ️ Thông báo tiếp thị liên kết
Nội dung trên trang này có chứa liên kết affiliate (tiếp thị liên kết). Khi khách truy cập mua sản phẩm hoặc dịch vụ qua các liên kết này, trang sẽ nhận hoa hồng từ bên bán. Trong quá trình đó, số tiền người mua phải trả (sẽ giảm khi có chương trình khuyến mãi ↓) không hề tăng lên. Giá, khuyến mãi và tình trạng hàng được đăng theo thời điểm viết bài và có thể khác với thực tế, vì vậy hãy kiểm tra lại lần cuối với bên bán trước khi mua. Việc chọn và đánh giá sản phẩm dựa trên tiêu chí riêng của trang; việc có nhận hoa hồng hay không không ảnh hưởng đến thứ tự giới thiệu hay nội dung đánh giá.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Prove your humanity: 0   +   4   =