Làm thế nào để loại bỏ quá trình theo tên trong Linux

Buộc thoát khỏi các quy trình hoạt động sai bằng các lệnh Linux này

Để giải thích ý nghĩa của 'Process' bằng những từ đơn giản nhất là nó là một phiên bản đang chạy của bất kỳ ứng dụng hoặc chương trình nào trên hệ thống của bạn. Bạn có thể đang chạy nhiều ứng dụng đồng thời như duyệt web, nghe nhạc làm việc trên thiết bị đầu cuối của bạn, v.v. Có nhiều quy trình nền liên quan đến các ứng dụng này do người dùng chạy.

Mỗi ứng dụng hoặc một chương trình chạy trên hệ thống của bạn sẽ tạo ra nhiều quy trình được liên kết với ứng dụng duy nhất của bạn. Đôi khi đây có thể là một vấn đề và loại bỏ các quy trình này là lựa chọn duy nhất mà bạn có.

‘Killing’ một quy trình là một tùy chọn hữu ích mà Linux cung cấp cho bạn để dừng các quy trình đang diễn ra, có thể là quy trình nền trước hoặc quy trình nền. Trong bài viết này, chúng ta sẽ xem xét các lệnh như giết, pkillkillall buộc thoát khỏi bất kỳ quá trình nào trên hệ thống.

Tại sao phải giết một Quy trình?

Hiểu khái niệm về việc giết một quy trình là điều quan trọng trước khi chuyển sang phần hướng dẫn này. Giết chóc có vẻ là một cách rất tàn bạo để diễn đạt khái niệm này, nhưng nghĩa bóng của nó là hủy bỏ một cách cưỡng bức một quá trình.

Bây giờ, tại sao lại hủy bỏ hoặc bỏ một quá trình đang diễn ra? Khi nhiều quy trình đang chạy trong nền, tất cả hoặc một vài quy trình trong số đó có thể hoạt động sai và có thể khiến hệ thống của bạn hoạt động sai. Điều này làm trì hoãn các tác vụ đang diễn ra của bạn vì quá trình bị trục trặc có thể đóng băng hệ thống của bạn trong một thời gian.

Đôi khi, thoát khỏi tất cả các quy trình hoạt động sai dường như là lựa chọn duy nhất để khôi phục trạng thái bình thường trên hệ thống của bạn. Linux cho phép bạn giết một quy trình bằng cách sử dụng pid hoặc tên quy trình.

Sử dụng pgrep yêu cầu

Hầu hết người dùng Linux đều quen thuộc với grep yêu cầu. Các pgrep lệnh có thể được sử dụng trên các dòng tương tự của grep.

pgrep khi được sử dụng, hiển thị pid của tiến trình đang chạy như được chỉ định trong lệnh. Lệnh này sẽ tỏ ra rất hữu ích khi sử dụng pkill yêu cầu.

Cú pháp chung:

pgrep [tùy chọn] [mẫu]

Các tùy chọn quan trọng có sẵn với pgrep yêu cầu

Lựa chọnSự miêu tả
-uliệt kê id quy trình do một người dùng cụ thể sở hữu
-Cđếm số lượng quy trình phù hợp
-TÔIchỉ liệt kê tên quy trình
-Mộtliệt kê đường dẫn đầy đủ của tên quy trình

Hãy để chúng tôi chứng minh việc sử dụng pgrep lệnh bằng cách sử dụng một ví dụ.

pgrep -u gaurav gnome

Ở đây, chúng tôi muốn xem pids của tiến trình gnome do người dùng ‘gaurav’ sở hữu. Lựa chọn -u cho phép bạn liệt kê pids của các quy trình do một người dùng cụ thể sở hữu. Trong trường hợp này, người dùng gaurav.

Đầu ra:

gaurav @ ubuntu: ~ $ pgrep -u gaurav gnome 1752 1755 1909 1922 2021 2576 4279 gaurav @ ubuntu: ~ $

Khi chúng ta tiếp tục với hướng dẫn này, pgrep lệnh sẽ giúp chúng tôi xác nhận xem quá trình đã bị hủy hay vẫn đang chạy.

Bây giờ chúng ta hãy chuyển sang pkill lệnh và sự thực thi của nó.

Sử dụng pkill yêu cầu

Bạn có thể dùng pkill lệnh trong Linux để hủy tiến trình bằng cách sử dụng tên tiến trình. Ngay cả khi bạn không biết pid của một số quy trình, thậm chí sau đó bạn có thể hủy quy trình cụ thể đó bằng cách sử dụng pkill yêu cầu.

Các quy trình có thể được chỉ định bằng tên đầy đủ của chúng hoặc tên một phần trong khi sử dụng pkill yêu cầu. Ngay cả khi bạn nhập tên một phần của quá trình, pkill lệnh sẽ khớp với tất cả các tiến trình đang chạy với tên khớp mà bạn đã nhập trong lệnh.

Cú pháp:

pkill [tùy chọn] [process_name_pattern] 

Thí dụ:

Hãy để chúng tôi hiển thị các quy trình hiện đang chạy bằng cách sử dụng đứng đầu yêu cầu. Bạn cũng có thể sử dụng ps lệnh liệt kê các tiến trình.

đứng đầu
top - 14:24:02 up 3:12, 1 người dùng, tải trung bình: 0.29, 0.48, 0.58 Nhiệm vụ: tổng cộng 221, 1 đang chạy, 172 đang ngủ, 0 dừng, 1 zombie% Cpu: 5.6 us, 1.0 sy , 0.0 ni, 92.9 id, 0.4 wa, 0.0 hi, 0.1 si, 0.0 st KiB Mem: tổng cộng 3928240, 610456 miễn phí, 2233152 đã sử dụng, 1084632 buff / cache KiB Swap: tổng cộng 4083708, 3378884 miễn phí, 704824 đã sử dụng. 1187268 lịch phát sóng Mem PID USER PR NI VIRT RES SHR S% CPU% MEM TIME + COMMAND 4077 gaurav 20 0 3312128 673480 118360 S 19,6 17,1 15: 13,23 Nội dung web 3712 gaurav 20 0 3953008 453544 116476 S 4.0 11,5 9: 28,39 MainThread 2010 gaurav 20 0 4084232 111096 45024 S 1,7 2,8 3: 14,85 gnome-shell 1197 root 20 0 1039612 33704 22988 S 1,0 0,9 3: 04,42 Xorg 1426 couchdb 20 0 3772396 16908 2520 S 0,7 0,4 1: 50,83 chùm.smp 3288 gaurav 20 0 722480 25048 18272 S 0,7 0,6 0: 06,84 gnome-terminal- 3915 gaurav 20 0 2804900 231524 111228 S 0,7 5,9 0: 54,42 Nội dung web 4146 gaurav 20 0 3017924 245304 120604 S 0,7 6.2 2: 01,21 Nội dung web 4417 gaurav 20 0 2964208 234396 119160 S 0,7 6,0 0 : 59,90 Nội dung web 4860 gaurav 20 0 3066800 372920 132544 S 0,7 9,5 0: 48,20 Nội dung web 16007 gaurav 20 0 41944 3780 3116 R 0,7 0,1 0: 00,28 trên cùng 

Sử dụng đứng đầu lệnh sẽ hiển thị nhiều quy trình trên thiết bị đầu cuối của bạn. Hãy để chúng tôi cố gắng hiển thị quy trình với một tên cụ thể. Chúng tôi sẽ sử dụng grep lệnh để hiển thị một tiến trình có tên khớp với chuỗi ‘mongo’.

đầu trang | grep -i mongo

Ghi chú: Ở đây, tôi đã sử dụng tùy chọn -i để làm cho tìm kiếm không phân biệt chữ hoa chữ thường.

Đầu ra của lệnh này sẽ hiển thị các quy trình phù hợp với tên ‘mongo’

 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,22 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,25 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,27 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,29 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,31 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,33 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,36 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,38 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,40 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,43 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,45 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,48 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,3 0,1 1: 03,49 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,52 mongod 1158 mongodb 20 0 288564 4848 1320 S 0,7 0,1 1: 03,54 mongod 1158 mongodb 20 0 288564 4848 1320 S 1,0 0,1 1: 03,57 mongod

Bây giờ, chúng ta sẽ sử dụng pkill lệnh để giết tiến trình có tên là ‘mongo’.

pkill mongo

Lệnh này bây giờ sẽ giết quá trình mongo. Chúng tôi có thể xác nhận xem quá trình có bị buộc phải dừng lại hay không bằng cách sử dụng pgrep lệnh hiển thị pid của tiến trình đang chạy theo các tiêu chí do người dùng chỉ định.

gaurav @ ubuntu: ~ $ pgrep mongo gaurav @ ubuntu: ~ $

Lệnh này sẽ không trả về giá trị nào. Điều này xác nhận rằng quá trình 'mongo' hiện đã bị hủy bằng cách sử dụng pkill yêu cầu.

Các tùy chọn thường được sử dụng với pkill yêu cầu

Trong khi sử dụng pkill lệnh, chúng tôi sẽ cần các tùy chọn đã đề cập để sử dụng hợp lý và dễ dàng pkill yêu cầu.

Tùy chọnSự miêu tả
-fkhớp với các đối số đầy đủ bao gồm dấu cách, dấu ngoặc kép, ký tự đặc biệt
-uđể thông báo cho quá trình pkill khớp với quá trình đang được chạy bởi người dùng được chỉ định
-1tải lại quá trình
-9giết chết quá trình
-15hủy bỏ một cách duyên dáng

Hãy để chúng tôi xem thêm một ví dụ về pkill lệnh bằng cách sử dụng -f lựa chọn.

Có hai lệnh hiện đang thực hiện trên thiết bị đầu cuối như hình dưới đây.

ping bbc.com ping youtube.com

Cả hai quy trình đều được khởi tạo bởi ping yêu cầu. Bây giờ, giả sử chúng ta chỉ muốn chấm dứt một quá trình “ping youtube.com” thì chúng ta phải sử dụng -f tùy chọn với pkill lệnh giết một tiến trình với một tên cụ thể bao gồm các khoảng trắng và dấu ngoặc kép từ tên tiến trình.

Yêu cầu:

gaurav @ ubuntu: ~ $ pkill -f "ping youtube.com" gaurav @ ubuntu: ~ $ 

Kết quả:

gaurav @ ubuntu: ~ $ ping youtube.com PING youtube.com (142.250.67.206) 56 (84) byte dữ liệu. 64 byte từ bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq = 1 ttl = 117 time = 30,9 ms 64 byte từ bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq = 2 ttl = 117 thời gian = 121 ms 64 byte từ bom12s08-in-f14.1e100.net (142.250.67.206): icmp_seq = 206 ttl = 117 thời gian = 86,5 ms 64 byte từ bom12s08-in-f14.1e100.net (142.250.67.206 ): icmp_seq = 207 ttl = 117 time = 105 ms Đã kết thúc gaurav @ ubuntu: ~ $ 

Đây, “ping youtube.com"Quy trình hiện đã bị hủy và"ping bbc.com”Vẫn đang chạy trên thiết bị đầu cuối.

Trong trường hợp, nếu chúng tôi đã sử dụng pkill ping lệnh, nó sẽ giết cả hai ping quy trình, điều không mong muốn.

Tín hiệu được sử dụng với pkill yêu cầu

pkill buộc một quy trình phải thoát bằng cách gửi một tín hiệu cụ thể đến quy trình đó. Có ba tín hiệu có thể xảy ra pkill lệnh có thể gửi tới tiến trình tùy thuộc vào lệnh mà người dùng đưa ra.

Sau đây là danh sách các tín hiệu có sẵn.

Tín hiệuSự chỉ rõ
1(HÚT)tải lại quy trình được chỉ định
9 (GIẾT)giết quá trình được chỉ định
15 (THUẬT NGỮ)nhẹ nhàng dừng hoặc hủy bỏ quá trình đã chỉ định

Đối với hướng dẫn này, chúng tôi sẽ dựa nhiều vào GIẾT tín hiệu. Hãy cùng chúng tôi đi qua một số ví dụ để hiểu rõ hơn.

Sử dụng pgrep lệnh để có được pid khớp với tên apache.

gaurav @ ubuntu: ~ $ pgrep apache 1218 10402 10403 gaurav @ ubuntu: ~ $
pkill -KIll apache

HOẶC bạn cũng có thể sử dụng lệnh với các số (ví dụ: 1, 9, 15)

pkill -9 apache

Cả hai lệnh hiển thị ở trên sẽ giết apache của tiến trình. Xác nhận với pgrep lệnh một lần nữa.

gaurav @ ubuntu: ~ $ pgrep apache gaurav @ ubuntu: ~ $

Như pgrep lệnh không trả về kết quả đầu ra, chứng tỏ rằng quá trình apache đã bị giết.

Sự kết luận

Trong hướng dẫn này, chúng tôi đã tìm hiểu về pkill và cách nó được sử dụng để kết thúc tiến trình bằng cách sử dụng trực tiếp tên tiến trình. Chúng tôi cũng đã tìm hiểu về pgrep lệnh được sử dụng để tìm nạp id quy trình của quy trình được chạy bởi bất kỳ người dùng cụ thể nào. Các pgrep lệnh cho phép chúng tôi kiểm tra chéo xem quá trình có bị giết hay không.