Tin tức và phân tích của tất cả các thiết bị di động

Làm thế nào để giết một tiến trình trong linux

Tất cả chúng ta đều từng trải qua những ngày máy tính cực kỳ chậm và bị kẹt khi thực hiện ngay cả những tác vụ cơ bản. Trong hệ thống Windows bạn chỉ có trình quản lý tác vụ hệ thống Windows để kiểm tra và tiêu diệt các tiến trình không quan trọng nhưng tiêu tốn lượng bộ nhớ rất lớn. Tuy nhiên, trong Linux, bạn có cả kho lệnh và công cụ GUI để quản lý các tác vụ này. Trong bài viết này, chúng tôi sẽ giới thiệu cho bạn một số phương thức dòng lệnh (CLI) dễ dàng cũng như các phương thức GUI để tắt một tiến trình trên Linux.

Quá trình kết thúc trên Linux (2023)

Nhưng trước khi đi sâu vào thế giới quản lý quy trình trong Linux, chúng ta hãy hiểu chính xác quy trình là gì và ID quy trình là gì trong hệ thống Linux.

Tiến trình trong Linux là gì

Trong Linux, mỗi phiên bản hiện đang chạy của một chương trình được gọi là một “quy trình”, trong khi mỗi phiên bản thực thi được gọi là một chương trình. Khi bất kỳ chương trình nào được thực thi, một quy trình sẽ được tạo và mỗi quy trình được gán một quy trình duy nhất 5-số nhận dạng kỹ thuật số được gọi là “ID tiến trình”. Khi một tiến trình kết thúc việc thực thi hoặc bị buộc chấm dứt, ID tiến trình của nó sẽ được gán cho tiến trình tiếp theo trong hàng đợi.

Giết một tiến trình bằng dòng lệnh trong linux

Mặc dù việc sử dụng thiết bị đầu cuối đôi khi có vẻ đáng sợ so với việc sử dụng các công cụ GUI cho các tác vụ cơ bản, nhưng việc quản lý các quy trình khác nhau sẽ trở nên dễ dàng hơn nhiều khi bạn biết các lệnh và các tùy chọn khác nhau của chúng.

tín hiệu kết thúc

Khi bạn cố gắng loại bỏ một tiến trình từ GUI hoặc CLI trong Linux, hạt nhân sẽ gửi tín hiệu kết thúc tới tiến trình đó. Quá trình hoạt động tương ứng, tùy thuộc vào tín hiệu nhận được. Mỗi tín hiệu này được gán một số cụ thể để chương trình có thể nhanh chóng hiểu được nó. Có nhiều loại tín hiệu kết thúc, nhưng chúng tôi chỉ giải thích những loại tín hiệu quan trọng nhất ở đây:

Giá trị SignalNumeric Mô tả SIGHUP1 Có nghĩa là “Tạm dừng tín hiệu”
Nó được gửi khi thiết bị đầu cuối đóng lại.SIGINT2 có nghĩa là “Ngắt tín hiệu”
Nó được gửi khi người dùng hoàn tất quá trình.SIGKILL9 Có nghĩa là “Tiêu diệt tín hiệu”
Nó được gửi khi một quá trình cần được chấm dứt ngay lập tức SIGTERM15Nó có nghĩa là “kết thúc tín hiệu”
Nó được gửi khi một quá trình cần được chấm dứt và tiêu tốn tài nguyên SIGSTOP19 – dành cho ARM, x86
17 – cho ALPHA
23 – cho MIPS
24 – đối với PA-RISCIt có nghĩa là “Giữ tín hiệu”
Nó được gửi khi một quá trình cần được tạm dừng và tiếp tục lại sau đó. Các tín hiệu được sử dụng phổ biến nhất là SIGKILL (9) và SIGTERM (15).

Xác định ID tiến trình

Trước khi kết thúc quá trình, bạn cần biết một số chi tiết của quy trình như id tiến trình, thời gian chạy, v.v. Để biết chi tiết về quy trình, hãy sử dụng lệnh ps:

ps

Với lệnh ps, bạn phải tìm kiếm quy trình bằng cách cuộn và viết tên của nó, điều này có thể gây khó khăn. Thay vào đó, bạn thậm chí có thể sử dụng grep với lệnh ps trong quy trình như dưới đây:

ps | grep

Để đơn giản hóa mọi thứ, có một lệnh riêng chỉ hiển thị cho bạn ID tiến trình của bất kỳ quy trình đang chạy nào mà bạn cần biết. Cú pháp của lệnh pidof là:

pidof

Kết thúc quá trình bằng lệnh kill

Khi bạn lưu ý ID của tiến trình bạn muốn chấm dứt, lệnh phổ biến nhất được sử dụng để chấm dứt các chương trình trên Linux là lệnh kill. Cú pháp của lệnh kill là:

giết

Tham số này là tùy chọn và lệnh kill sẽ gửi tín hiệu SIGTERM (15) theo mặc định. Bạn có thể gửi bất kỳ tín hiệu nào khác theo giá trị số hoặc tên tín hiệu thực tế từ bảng trên.

Kết thúc quá trình bằng lệnh pkill

Nếu bạn thấy việc tìm kiếm ID tiến trình bất tiện, bạn có thể sử dụng lệnh pkill. Nó tìm kiếm các quy trình phù hợp với mẫu và sau đó loại bỏ chúng. Cú pháp lệnh pkill là:

pkill

Một số tùy chọn ghép nối phổ biến với lệnh pkill là:

OptionDescription-nChỉ chọn các quy trình gần đây nhất khớp với quy trình ID-uChọn các quy trình thuộc sở hữu của người dùng đã chỉ định-xSelects các quy trình khớp chính xác với mẫu

Điều này đặc biệt quan trọng khi nhiều người dùng đang làm việc trên các phiên bản khác nhau của cùng một chương trình trên cùng một hệ thống và một phiên bản bắt đầu hoạt động bất ngờ. Ví dụ: trong ảnh chụp màn hình bên dưới, chúng tôi loại bỏ phiên bản “gedit” do người dùng “intel” sở hữu bằng lệnh pkill trên Linux:

pkill -u Intel gedit

Kết thúc quá trình bằng lệnh killall

Lệnh killall hoạt động tương tự như lệnh kill, nhưng giết tất cả các tiến trình khớp với tên tiến trình, bất kể người dùng. Theo mặc định, nó sẽ gửi tín hiệu SIGTERM trừ khi có quy định khác. Điều đáng chú ý là lệnh killall không bao giờ có thể tự hủy, nhưng nó có thể chấm dứt các trường hợp khác của lệnh killall. Cú pháp killall như sau:

giết chết tất cả

Một số tùy chọn ghép nối với lệnh killall là:

Tùy chọnMô tả -r Diễn giải tên_quy trình dưới dạng mẫu biểu thức chính quy và sau đó loại bỏ các quy trình khớp với mẫu đó -ukkills quy trình được chỉ định thuộc sở hữu của chủ sở hữu được chỉ định. -oGiết các quy trình được chỉ định cũ hơn (bắt đầu sớm hơn) so với thời gian đã chỉ định. -yGiết các quy trình được chỉ định trẻ hơn ( bắt đầu sau) thời gian quy định.

Lệnh killall có thể hữu ích để loại bỏ một loạt tiến trình giống nhau hoặc thậm chí tất cả các tiến trình thuộc sở hữu của một chủ sở hữu cụ thể. Ở đây trong ví dụ của chúng tôi, chúng tôi loại bỏ tất cả các quy trình “ngủ trong 500 giây” bằng lệnh killall trên Linux:

killall -v sen

Kết thúc quá trình Linux bằng lệnh top/htop

Phương pháp tiêu diệt tiến trình này rất hữu ích khi bạn không biết tiến trình nào đang tiêu tốn nhiều tài nguyên nhất. Trong cả hai lệnh, bạn có thể điều hướng qua tất cả các tiến trình đang chạy và thậm chí cả các tiến trình zombie và nhanh chóng chấm dứt chúng. Để sử dụng lệnh top để giám sát tài nguyên, hãy sử dụng cú pháp trong terminal:

đỉnh cao

Hiểu đầu ra:

Đầu ra chính của lệnh top được chia thành các cột:

  • PID – hiển thị mã định danh của tiến trình đang chạy
  • Người dùng – hiển thị chủ sở hữu của quy trình
  • PR – hiển thị giá trị ưu tiên của quy trình được hệ điều hành chỉ định
  • NI – Hiển thị các giá trị đẹp giống như gán các giá trị trì hoãn của người dùng để kiểm soát mức độ ưu tiên của tác vụ theo cách thủ công.
  • VIRT – hiển thị dung lượng bộ nhớ ảo được sử dụng bởi tiến trình.
  • RES – hiển thị dung lượng bộ nhớ vật lý được sử dụng bởi tiến trình
  • SHR – hiển thị dung lượng bộ nhớ được chia sẻ bởi các tiến trình khác
  • S – hiển thị trạng thái hiện tại của quy trình, có thể là:
    • D – giấc ngủ không bị gián đoạn
    • R – đang chạy
    • S – ngủ
    • T đã dừng lại
    • z-zombie
  • %CPU – Hiển thị số lượng CPU được sử dụng bởi tiến trình theo phần trăm
  • %MEM – Hiển thị dung lượng RAM được sử dụng bởi quy trình tính bằng phần trăm
  • TIME+ – Hiển thị tổng thời lượng của quá trình
  • Lệnh – Hiển thị lệnh nào được gọi cho quy trình.
  • Nếu bạn không biết ID tiến trình của công việc bạn muốn loại bỏ, hãy sử dụng các phím mũi tên để điều hướng trong danh sách hoặc tìm kiếm tên quy trình trong bảng quy trình Linux.

    Để tìm kiếm tên quy trình, nhấn phím “L” trên bàn phím và nhập tên quy trình bạn muốn tìm kiếm. Khi bạn tìm thấy quy trình bất chính, hãy nhấn “k” trên bàn phím để tắt quy trình đó. Bây giờ, hãy nhập id quy trình hoặc để lại quy trình hiện được đánh dấu và nhấn ‘ENTER’. Sau đó nhập tín hiệu kết thúc, sau đó nhấn “ENTER” để tắt chương trình. Để quay lại thiết bị đầu cuối, nhấn “q” trên bàn phím.

    Mặc dù lệnh trên cùng hiển thị các chi tiết như ID tiến trình, mức sử dụng bộ nhớ, v.v. cho tất cả các tiến trình đang chạy, nhưng nó không phù hợp cho người mới bắt đầu vì nó không hiển thị bất kỳ ánh xạ phím nào hoặc cách sử dụng chúng. Mặt khác, lệnh htop có giao diện thân thiện hơn với người dùng, ngay cả đối với tiện ích dòng lệnh. Ngoài ra, nó hiển thị tất cả các chi tiết trong một chế độ xem riêng biệt để không làm lộn xộn cửa sổ terminal. Nó không được cài đặt sẵn trong hầu hết các bản phân phối và bạn cần sử dụng lệnh sau để cài đặt htop trên Linux:

    cài đặt sudo apt -y htop

    Để sử dụng htop quản lý các tiến trình trên Linux, hãy sử dụng lệnh bên dưới:

    Htop

    Để tắt chương trình, hãy điều hướng đến tên của tiến trình bạn muốn chấm dứt, nhấn “F9”, sau đó nhấn Enter. Nếu bạn muốn tìm kiếm và hủy bất kỳ chương trình nào, hãy nhấn “F3” trên bàn phím, nhập tên và nhấn Enter. Tên quy trình sẽ được tô sáng, nhấn F9 rồi nhấn enter trên bàn phím để kết thúc quy trình.

    Hủy tiến trình bằng System Monitor trên Linux

    Nếu thấy phương pháp dòng lệnh khó khăn với mình, bạn có thể sử dụng công cụ giám sát hệ thống tích hợp sẵn trong mọi bản phân phối Linux. Để tìm hiểu cách thức hoạt động của nó, hãy mở tiện ích giám sát hệ thống từ menu Ứng dụng và làm theo các bước bên dưới.

    1. Khi mở công cụ giám sát hệ thống, bạn sẽ thấy ba tab ở trên cùng có tên – Quy trình, Tài nguyên và Hệ thống tệp. Để quản lý các quy trình của bạn, hãy chuyển đến tab “Quy trình”. Ở đây bạn sẽ thấy tất cả các tiến trình hiện đang chạy. Nhấn “CTRL+F” để tìm kiếm tên quy trình. Nhấp vào tên của quá trình bạn muốn kết thúc và nhấp vào “Kết thúc quá trình”.

    2. Sau đó, bạn sẽ được yêu cầu xác nhận xem bạn có muốn kết thúc quá trình hay không. Hãy tiếp tục và nhấp vào nút “Kết thúc quá trình” lớn màu đỏ để kết thúc quá trình trên Linux.

    Các câu hỏi thường gặp

    Làm cách nào để dừng tất cả các tiến trình trong Linux?

    Nếu bạn muốn dừng tất cả các tiến trình (ngoại trừ các tiến trình đăng nhập shell, init và kernel cụ thể) cho một người dùng cụ thể trên Linux, hãy sử dụng lệnh pkill hoặc lệnh killall theo cú pháp:

    pkill -u

    killall-u

    Nếu bạn cần tắt mọi quy trình cho mọi người dùng, bao gồm cả hệ thống init, hãy nhấn “ALT + Prt Sc + o” trên bàn phím của bạn.

    Bạn có thể hoàn thành quá trình này?

    Khi bạn đóng một quy trình nền không cần thiết hoặc một quy trình người dùng sử dụng nhiều bộ nhớ hệ thống, bạn sẽ giải phóng các tài nguyên mà hiện các quy trình khác có thể sử dụng. Nhưng trước khi đóng bất kỳ tiến trình nào, hãy đảm bảo rằng bạn không tắt một tiến trình thiết yếu của hệ điều hành.

    Các tiến trình nền trong Linux là gì?

    Trong Linux, các tiến trình nền là các tiến trình có thể chạy mà không cần phiên bản shell hoặc bất kỳ sự can thiệp nào của người dùng. Chúng có thể được xem bằng bất kỳ lệnh nào – top, htop, ps, v.v.

    Quá trình zombie là gì?

    Một tiến trình đã bị người dùng giết nhưng vẫn chiếm bộ nhớ được gọi là tiến trình zombie.

    CTRL+Z làm gì trong Linux?

    Khi bạn sử dụng CTRL+Z trong Linux, nó sẽ gửi tín hiệu SIGTSTP để tạm dừng quá trình và gửi nó ở chế độ nền. Khi một tiến trình bị treo ở chế độ nền, nó không thể bị giết cho đến khi được đưa trở lại nền trước.

    Dễ dàng tiêu diệt các tiến trình trên Linux

    Loại bỏ các tiến trình ngốn bộ nhớ là một nhiệm vụ khá quan trọng mà mọi người dùng nên tìm hiểu. Trong bài viết này, chúng tôi đã trình bày cả phương pháp dòng lệnh, bao gồm các lệnh như killall và pkill, cũng như các phương thức GUI để hủy tiến trình trên Linux. Chúng tôi thậm chí còn trình bày chi tiết cách sử dụng các công cụ phổ biến như top và htop để quản lý các quy trình trên PC Linux của bạn. Nếu bạn gặp phải bất kỳ vấn đề nào khi sử dụng các công cụ tiêu diệt quy trình này, hãy cho chúng tôi biết trong phần nhận xét bên dưới.