Làm thế nào để tiêu diệt các tiến trình Zombie trong Ubuntu 20.04 LTS

Tác giả Network Engineer, T.Hai 11, 2022, 10:41:56 CHIỀU

« Chủ đề trước - Chủ đề tiếp »

0 Thành viên và 1 Khách đang xem chủ đề.

Làm thế nào để tiêu diệt các tiến trình Zombie trong Ubuntu 20.04 LTS


Một thây ma hoặc một tiến trình không còn tồn tại trong Linux là một tiến trình đã được hoàn thành, nhưng mục nhập của nó vẫn còn trong bảng tiến trình do thiếu sự tương ứng giữa các tiến trình mẹ và con. Thông thường, một tiến trình mẹ sẽ kiểm tra trạng thái của các tiến trình con của nó thông qua hàm wait(). Khi tiến trình con kết thúc, hàm chờ sẽ báo hiệu cho cha mẹ hoàn toàn thoát khỏi tiến trình khỏi bộ nhớ. Tuy nhiên, nếu cha không gọi được hàm chờ cho bất kỳ chức năng con nào của nó, thì tiến trình con vẫn tồn tại trong hệ thống như một tiến trình chết hoặc thây ma. Các tiến trình zombie này có thể tích tụ với số lượng lớn trên hệ thống của bạn và ảnh hưởng đến hiệu suất của nó. Trong trường hợp đó, bạn có thể phải tiêu diệt những thây ma này theo cách thủ công thông qua các cách và lệnh được mô tả trong hướng dẫn này.

1. Xem tiến trình Zombie

Bạn có thể kiểm tra hiệu suất của hệ thống bằng cách xem các tiến trình khác nhau đang chạy trên hệ thống của mình, bao gồm cả các tiến trình zombie thay đổi hiệu quả. Ubuntu cho phép bạn xem các tiến trình này theo cách sau:

  • Thông qua Giao diện Người dùng Đồ họa
  • Thông qua dòng lệnh

2. Thông qua GUI

Để xem bằng đồ thị bất kỳ tiến trình zombie nào đang chạy trên hệ thống của bạn, hãy mở tiện ích Giám sát Hệ thống thông qua Ubuntu Dash của bạn. Trong ảnh chụp màn hình sau của Màn hình Hệ thống của mình, bạn có thể thấy rằng có hai thây ma đang chạy trên hệ thống của mình. Cũng có thể số lượng tiến trình zombie trên hệ thống của bạn có thể ít hơn hoặc nhiều hơn những tiến trình đang chạy trên hệ thống của mình.


3. Thông qua dòng lệnh

Lệnh top hiển thị một cái nhìn chi tiết về các tiến trình đang chạy trên hệ thống của bạn cùng với tài nguyên bộ nhớ và CPU mà chúng đang sử dụng. Nó cũng cung cấp cho bạn thông tin về bất kỳ tiến trình zombie nào đang chạy trên hệ thống của bạn. Mở Terminal bằng cách nhấn Ctrl + Alt + T, sau đó gõ top. Chúng ta sẽ nhận được kết quả sau khi chạy lệnh này.

Mã nguồn [Chọn]
$ top

Bạn có thể thấy ở dòng thứ hai rằng có 1 tiến trình zombie đang chạy trên hệ thống của mình.

Nếu bạn muốn biết thêm chi tiết về tiến trình zombie, hãy sử dụng lệnh sau:

Mã nguồn [Chọn]
$ ps axo stat,ppid,pid,comm | grep -w defunct

Lệnh này sẽ cung cấp cho bạn trạng thái, ID cha mẹ, ID tiến trình, chương trình đang chạy tiến trình zombie (một chương trình giả có tên 'zombie' trên hệ thống của tôi). Cờ không còn tồn tại cho bạn biết rằng đây là một tiến trình chết, xác sống.

4. Giết một Zombie-Process

Trước tiên, hãy để chúng ta hiểu các tiến trình zombie là mối đe dọa đối với hiệu suất của hệ thống của chúng ta như thế nào. Điều quan trọng cần biết là các thây ma đã chết và hầu hết các tiến trình đã hoàn thành không chiếm bộ nhớ hoặc tài nguyên CPU. Tuy nhiên, mỗi tiến trình này có một ID tiến trình duy nhất được chỉ định cho chúng đến từ một nhóm PID giới hạn dành riêng cho bộ xử lý của bạn. Nếu một số lượng lớn thây ma tụ tập, chúng sẽ ăn hết phần lớn vùng PID và các tiến trình mới sẽ không thể khởi chạy do thiếu ID tiến trình.

Một số lượng nhỏ các chương trình không còn tồn tại chiếm giữ hệ thống của bạn không phải là một mối đe dọa lớn nhưng điều đó có nghĩa là các chương trình mẹ của chúng không thể tắt chúng do lỗi hoặc thiếu chức năng wait().

Khi một tiến trình mẹ không thể tự động gọi hàm wait(), chúng ta cần báo hiệu thủ công tiến trình mẹ để chạy hàm chờ trên tất cả các tiến trình con của nó để những tiến trình có trạng thái hoàn chỉnh có thể được gọi lại. Chúng ta có thể làm điều này bằng cách chạy lệnh SIGCHLD. Khi điều đó không hiệu quả, chúng ta có thể giết tiến trình mẹ theo cách thủ công để tất cả các zombie con của nó cũng bị giết, giải phóng ID tiến trình cho các tiến trình mới.

Bạn có thể tiêu diệt các tiến trình zombie thông qua các cách sau:

  • Thông qua Giao diện Người dùng Đồ họa
  • Thông qua dòng lệnh

4.1. Thông qua GUI

Bạn có thể tiêu diệt một tiến trình thây ma bằng đồ thị thông qua Tiện ích giám sát hệ thống như sau:

  • Mở tiện ích System Monitor thông qua Ubuntu Dash.
  • Tìm kiếm thuật ngữ Zombie thông qua nút Tìm kiếm.
  • Chọn tiến trình zombie, nhấp chuột phải và sau đó chọn Kill từ menu.


Tiến trình thây ma sẽ bị giết khỏi hệ thống của bạn.

4.2. Thông qua dòng lệnh

Sau khi bạn biết rằng có bất kỳ tiến trình zombie nào đang chạy trên hệ thống của bạn thông qua lệnh trên cùng, hãy xem chi tiết của các tiến trình.

Cách thông thường là sử dụng lệnh sau để báo hiệu tiến trình mẹ của thây ma để giết lệnh.

Mã nguồn [Chọn]
$ kill -s SIGCHLD PID
Lệnh này có thể không hoạt động trong một số trường hợp vì không phải tất cả các tiến trình mẹ đều được lập trình đúng cách để kiểm tra thứ tự các tiến trình con. Trong trường hợp đó, bạn có thể hủy tiến trình mẹ thông qua lệnh sau:

Mã nguồn [Chọn]
$ sudo kill -9 3376

Khi bạn đã giết tất cả các tiến trình zombie bằng cách này và chạy lệnh trên cùng, bạn sẽ có thể thấy rằng không có tiến trình zombie nào đang chạy trên hệ thống của bạn nữa:


Sau khi làm việc với hướng dẫn này, bạn có thể tối ưu hóa hệ điều hành của mình bằng cách tìm kiếm bất kỳ tiến trình zombie nào trên hệ thống của bạn và giết chúng theo cách thủ công thông qua dòng lệnh hoặc giao diện người dùng đồ họa. Hành động này sẽ giải phóng các ID tiến trình cho các tiến trình mới mà bạn muốn chạy trên hệ thống của mình.