Bạn có ít nhất năm tab khác đang mở trên trình duyệt của mình để cố gắng tìm câu trả lời cho sự cố Linux mà bạn gặp phải không?
Hành vi này không dành riêng cho bạn hay con người nói chung. Máy cũng đa nhiệm. Và cũng giống như bạn, Linux cũng là một hệ thống đa nhiệm và có một số tiến trình diễn ra cùng lúc. Cho dù bạn là nhà phát triển sử dụng Linux chuyên nghiệp hay người dùng bình thường làm việc với Linux cho các hoạt động hàng ngày của mình, bạn đều có thể hiểu các quy trình song song này để duy trì toàn quyền kiểm soát hệ thống của mình. Quản lý quy trình và kiểm soát hệ thống là những khía cạnh thiết yếu của việc chạy hệ thống Linux.
Để quản lý hiệu quả các quy trình đang chạy trên hệ thống, xem điều gì đang xảy ra trong thời gian thực, có ý tưởng chung về tất cả các quy trình nền và kiểm soát tài nguyên hệ thống, bạn cần có kiến thức kỹ thuật về quản lý quy trình. Lệnh ps aux là một lệnh mạnh mẽ, đóng vai trò quan trọng trong việc quản lý quy trình và kiểm soát hệ thống. Trong bài đăng này, chúng ta sẽ tìm hiểu thêm về lệnh ps aux và các trường hợp sử dụng của nó. Chúng tôi cũng sẽ đề cập đến các nguyên tắc cơ bản về cách hoạt động của các quy trình Linux.
Hiểu quản lý quy trình trong Linux
Khi làm việc với Linux, hầu hết các tương tác của chúng ta với hệ thống đều ở dạng lệnh. Trong Linux, một tiến trình là việc thực thi một lệnh. Quản lý quy trình Linux liên quan đến việc thao tác các quy trình mà lệnh đã bắt đầu. Bạn có thể chấm dứt một quy trình, bắt đầu một quy trình hoặc tiếp tục các quy trình đã bị chấm dứt. Bạn cũng có thể thao tác các lệnh đang được thực hiện.
Có hai loại quy trình Linux:
- Quá trình tiền cảnh
- Quá trình nền
Quy trình tiền cảnh của Linux
Quy trình tiền cảnh là một quy trình đang được thực thi tích cực và thường yêu cầu tương tác liên tục và theo thời gian thực với người dùng. Khi một tiến trình tiền cảnh đang hoạt động, việc thực thi các tiến trình khác sẽ bị tạm dừng. Vì vậy, bạn không thể chạy bất kỳ lệnh nào khác. Một tiến trình tiền cảnh nhận đầu vào từ bàn phím dưới dạng đầu vào tiêu chuẩn hoặc stdin. Để tránh nhầm lẫn thêm, stdin và stdout là các luồng dữ liệu Linux cùng với stderr. Về cơ bản, đó là cách người dùng tương tác với quy trình và cung cấp dữ liệu cho quy trình đó. Có đầu ra tiêu chuẩn hoặc thiết bị xuất chuẩn được tạo ra bởi quy trình dựa trên chức năng và đầu vào của nó. Các tiến trình tiền cảnh là chế độ thực thi mặc định trong Linux.
Quy trình nền Linux
Các quy trình nền hoàn toàn trái ngược với các quy trình nền trước vì chúng không yêu cầu sự tương tác của người dùng và không chiếm toàn bộ không gian của thiết bị đầu cuối, cho phép thực thi các quy trình khác. Loại đầu vào và đầu ra của các tiến trình nền cũng khác nhau. Họ thường không dùng stdin. Tuy nhiên, kết quả của quá trình có thể được hiển thị dưới dạng thiết bị xuất chuẩn. Hiển thị đầu ra của các tiến trình nền diễn ra đồng thời với đầu ra của các tiến trình tiền cảnh khác. Vì vậy, bạn có thể xem tiến trình hoặc kết quả của quá trình chạy nền mà không làm gián đoạn các hành động quan trọng khác.
Vì việc thực thi nhiều tác vụ trong Linux phụ thuộc vào dòng lệnh nên các quy trình trên nền trước có thể gây rắc rối, trong khi việc chạy các quy trình trong nền sẽ giải phóng thiết bị đầu cuối của bạn khỏi thực hiện các tác vụ khác. Vì vậy, đặt một tác vụ nền trước ở chế độ nền là một điều hợp lý nên làm ở đây. Để gửi một tiến trình tới nền trước tiên bạn nên ngăn nó được thực thi ở nền trước. Điều này được thực hiện đơn giản bằng cách nhấn CTRL + Z. Sau đó, bằng cách gõ lệnh bg, quá trình đã kết thúc sẽ chạy lại trong nền. Lệnh fg sẽ đảo ngược quá trình và đưa nó lên nền trước.
Trạng thái quy trình; Cú pháp, lệnh và giải thích đầu ra
Quản lý quy trình hiệu quả trong Linux đòi hỏi phải hiểu trạng thái của các quy trình có thể được giám sát bằng lệnh ps aux. Nhưng trước khi tìm hiểu sâu hơn về lệnh ps aux, hãy tìm hiểu về các trạng thái quy trình khác nhau. Mặc dù có một số loại quy trình và trạng thái quy trình, nhưng đây là bảng gồm những loại quy trình phổ biến nhất:
| Trạng thái quy trình | Sự miêu tả | |
| Chạy(R) | Quá trình hiện đang chạy và chiếm tài nguyên CPU. | |
| đang ngủ | Gián đoạn (S) | Quá trình đang chờ một đầu vào hoặc sự kiện cụ thể bắt đầu chạy lại. Nó hiện không sử dụng tài nguyên CPU. Khi tài nguyên có sẵn hoặc tín hiệu được cung cấp, quá trình sẽ bắt đầu lại. |
| Không thể gián đoạn (D) | Giống như một quá trình đang ở trạng thái ngủ gián đoạn, một quá trình ngủ liên tục không sử dụng tài nguyên CPU. Điểm khác biệt duy nhất là nó không phản ứng với tín hiệu, nó chỉ hoạt động trở lại khi có sẵn tài nguyên. | |
| Đã dừng(T) | Đầu vào của người dùng hoặc một sự kiện cụ thể đã tạm dừng quá trình. Một tiến trình ở trạng thái dừng không sử dụng bất kỳ tài nguyên CPU nào. | |
| Chết(X) | Quá trình này đã bị chấm dứt và không còn tồn tại. | |
Hiểu rõ về các trạng thái quy trình này là một khía cạnh quan trọng trong việc quản lý và khắc phục sự cố hiệu quả của hệ thống Linux. Bây giờ, hãy đề cập đến cú pháp và lệnh để lấy trạng thái quy trình trong Linux, cũng như cách diễn giải đầu ra.
Cú pháp và lệnh để lấy trạng thái tiến trình
Bạn có thể lấy trạng thái tiến trình trong Linux bằng cú pháp cơ bản cho lệnh ps:
ps [process name]
Ngoài ra còn có các tùy chọn khác được sử dụng với lệnh ps:
phụ trợ: Tùy chọn này hiển thị danh sách đầy đủ tất cả các tiến trình đang chạy trên hệ thống. Nó cung cấp thông tin như ID tiến trình (PID), ID tiến trình gốc (PPID), mức sử dụng CPU và bộ nhớ cũng như trạng thái tiến trình. Đầu ra do lệnh ps aux cung cấp gọn gàng hơn nhiều, dễ đọc hơn và chứa nhiều thông tin hữu ích hơn lệnh ps cơ bản.
ef: Tùy chọn này hiển thị danh sách các quy trình ở định dạng đầy đủ với các chi tiết bổ sung, bao gồm hệ thống phân cấp quy trình dưới dạng cấu trúc giống cây.
l: Tùy chọn này cung cấp một định dạng danh sách dài, trình bày thông tin chi tiết hơn về các quy trình.
Hiểu đầu ra
Khi bạn thực thi lệnh ps với các tùy chọn mong muốn, nó sẽ tạo ra một đầu ra đại diện cho các tiến trình hiện đang chạy trên hệ thống của bạn. Đầu ra bao gồm các cột hiển thị các thuộc tính quy trình khác nhau, bao gồm ID tiến trình (PID), ID tiến trình gốc (PPID), mức sử dụng CPU, mức sử dụng bộ nhớ, trạng thái quy trình, loại thiết bị đầu cuối và tên lệnh.
Dưới đây là giải thích ý nghĩa của từng cột này:
PID: Cột này hiển thị ID duy nhất của quá trình.
TTY: Cột này hiển thị loại thiết bị đầu cuối mà người dùng đã đăng nhập.
THỜI GIAN: Cột này là chỉ báo cho biết quá trình này đã sử dụng bao nhiêu CPU tính bằng phút và giây.
CMD: Cột này thể hiện tên của lệnh bắt đầu quá trình này.
Việc phân tích thông tin được cung cấp bởi lệnh ps sẽ giúp bạn hiểu rõ hơn về hành vi của máy Linux.
Kỹ thuật ps nâng cao để quản lý quy trình bằng lệnh ps
Hãy cùng khám phá một số tính năng nâng cao của lệnh ps và cách sử dụng chúng một cách hiệu quả:
1. Sắp xếp quy trình
Lệnh ps aux có thể được sử dụng để sắp xếp đầu ra cuối cùng dựa trên các cột khác nhau. Ví dụ: bạn có thể sắp xếp các tiến trình theo ID tiến trình hoặc mức sử dụng CPU để xem chúng theo thứ tự mong muốn.
Dưới đây là ví dụ về sắp xếp các quy trình dựa trên ID tiến trình bằng ps aux:
ps aux –-sort pid
Lệnh head được sử dụng để chỉ lấy năm hàng đầu tiên của đầu ra.

2. Trực quan hóa cây quy trình
Nếu muốn thấy rõ mối quan hệ cha-con của các tiến trình, bạn có thể sử dụng lệnh ps với tùy chọn forest.
ps -aux --forest

Để xem mối quan hệ giữa các tiến trình theo mô hình cây, bạn cũng có thể sử dụng lệnh pstree. Lệnh này sẽ tạo ra một đầu ra dễ hiểu hơn và minh họa hệ thống phân cấp giữa các quy trình một cách hoàn hảo. Để sử dụng lệnh này, gõ lệnh sau:
pstree [pid or username]
Bằng cách cung cấp cho lệnh này một PID, bạn ra lệnh cho lệnh coi quá trình đó là gốc của cây.
3. Quy trình lọc
Hãy tưởng tượng bạn muốn làm việc với một nhóm quy trình cụ thể; ví dụ: bạn muốn liệt kê tất cả các quy trình của một trong những người dùng. Quá trình lọc dựa trên một đặc tính có thể được thực hiện bằng lệnh ps. Trong ví dụ này, chúng tôi đã lọc các quy trình dựa trên tên người dùng.
ps -u [username]

Và lệnh ps aux grep có thể lọc các tiến trình dựa trên bất kỳ mẫu hoặc từ khóa nào mà bạn cung cấp cho lệnh. Hãy xem đoạn mã dưới đây làm ví dụ:

Lệnh này trước tiên liệt kê tất cả các tiến trình và chuyển đầu ra cho lệnh grep để lọc danh sách dài đó dựa trên ID tiến trình. Trong hình trên, bạn có thể thấy danh sách tất cả các quy trình có số 15 trong thông tin của chúng.
Để biết thêm thông tin về lệnh ps và các khả năng của nó, bạn có thể đọc trang hướng dẫn sử dụng lệnh này. Đoạn mã dưới đây sẽ hiển thị trang hướng dẫn cho bạn:
man ps
Quản lý mức độ ưu tiên của tác vụ trong Linux
Để giải thích rõ hơn cách quản lý quy trình thực sự hoạt động trong Linux, chúng ta cũng nên đề cập đến mức độ ưu tiên của quy trình và cách thay đổi nó. Hãy tưởng tượng một tình huống trong đó bạn đang chạy một số tiến trình và CPU bị quá tải bởi các tác vụ. Nếu muốn quản lý tài nguyên của mình để hoạt động bình thường trong tình huống này, bạn cần thay đổi mức độ ưu tiên của các tác vụ đang chạy. Mỗi tiến trình trong Linux đều có một giá trị ưu tiên. Giá trị này giúp kernel ưu tiên các nhiệm vụ. Số ưu tiên dao động từ -20 đến 19, trong đó 19 là nhiệm vụ ít quan trọng nhất và -20 là nhiệm vụ cấp bách nhất. Quá trình có mức ưu tiên cao nhất sẽ nhận được nhiều thời gian CPU hơn so với các quy trình khác. Các giá trị ưu tiên thường được gọi là giá trị “đẹp”, với các giá trị Nice thấp hơn hiển thị mức độ ưu tiên cao hơn.
Bạn có thể sử dụng các lệnh Nice và Renice để phân bổ tài nguyên hệ thống một cách hiệu quả.
Nhưng trước khi thay đổi mức độ ưu tiên của các tiến trình, hãy khám phá trường hợp sử dụng đầu tiên của lệnh ps.
- Hiển thị mức độ ưu tiên hiện tại của tất cả các tiến trình bằng lệnh ps:
Lệnh này liệt kê tất cả các tiến trình cùng với ID tiến trình (PID), tên lệnh và mức độ ưu tiên hiện tại (giá trị đẹp):
ps -eo pid,cmd,nice

- Bắt đầu một tiến trình với mức độ ưu tiên cao mặc định bằng lệnh Nice:
Bạn có thể bắt đầu một quy trình với mức độ ưu tiên ưa thích của mình bằng lệnh này:
nice -n [priority] [command]
Thay thế [ưu tiên] bằng giá trị âm mong muốn biểu thị mức độ ưu tiên và [lệnh] bằng lệnh bạn muốn thực thi.
Đây là một ví dụ:

- Thay đổi mức độ ưu tiên của lệnh đang chạy:
renice -n [priority] -p [PID]
Thay thế Id tiến trình của tiến trình bạn muốn thao tác bằng [PID].
Nếu bạn muốn có một máy Linux mạnh mẽ để thực hiện tất cả các loại tác vụ, VPS Linux là giải pháp tốt nhất cho bạn. Cloudzy cung cấp nhiều gói VPS Linux khác nhau với bản phân phối ưa thích của bạn được cài đặt sẵn. Với nhiều đặc điểm thuận lợi như hỗ trợ 24/7, chính sách hoàn tiền trong 30 ngày và đảm bảo thời gian hoạt động 99,95%, Cloudzy đã cố gắng giữ mức giá ở mức thấp. Giá của chúng tôi dành cho VPS Linux chỉ bắt đầu ở mức 4,95 USD/tháng.
Hãy sở hữu cho mình một VPS Linux cao cấp hoặc tiết kiệm để lưu trữ trang web hoặc máy tính từ xa của bạn với mức giá rẻ nhất hiện có. VPS Chạy trên Linux KVM để tăng hiệu quả và hoạt động trên phần cứng mạnh mẽ với bộ lưu trữ SSD NVMe để tăng tốc độ.
Đọc thêmPhần kết luận
Tóm lại, việc nắm vững quản lý quy trình và kiểm soát hệ thống là điều bắt buộc đối với các quản trị viên hệ thống, những người đam mê Linux, những người ham học hỏi và những người dùng Linux thông thường. Tìm hiểu về các khả năng và chức năng của lệnh ps có thể giúp bạn dễ dàng học cách quản lý quy trình. Đó là lý do tại sao bài viết này thảo luận về các trường hợp sử dụng quan trọng của lệnh ps cũng như cung cấp cho người đọc phần giới thiệu về các quy trình Linux.
Câu hỏi thường gặp
Lệnh ps aux trong Linux là gì?
Lệnh ps aux Linux là lệnh thường được sử dụng trong Linux để lấy thông tin về các tiến trình đang chạy. Nó có thể cung cấp danh sách đầy đủ các quy trình ở định dạng thân thiện với người dùng, bao gồm ID tiến trình (PID), mức sử dụng CPU và bộ nhớ, trạng thái thực thi và các chi tiết quan trọng khác.
Hai loại quy trình trong Linux là gì?
Quá trình tiền cảnh và quá trình nền. Các tiến trình tiền cảnh chiếm thiết bị đầu cuối trong khi chạy và không cho phép thực hiện các thực thi khác. Các tiến trình nền chạy ngầm và không chiếm toàn bộ thiết bị đầu cuối.
Làm cách nào tôi có thể xem danh sách các tiến trình đang chạy trên hệ thống Linux của mình?
Bạn có thể lấy danh sách các tiến trình đang chạy trên hệ thống Linux của mình bằng cách sử dụng các lệnh như ps, top hoặc htop để xem. Ví dụ: lệnh Linux ps aux cung cấp thông tin chi tiết về tất cả các tiến trình đang chạy.