Hướng dẫn sử dụng lệnh nice và renice của Linux (7 ví dụ)

theanh

Administrator
Nhân viên
Sức mạnh của dòng lệnh Linux có thể được đánh giá từ thực tế là bạn thậm chí có thể dễ dàng điều chỉnh thứ tự ưu tiên lập lịch của các quy trình bằng các công cụ dòng lệnh. Có, điều đó là có thể và trong hướng dẫn này, chúng ta sẽ thảo luận về cách thực hiện điều đó bằng các tiện ích nicerenice.

Nhưng trước khi thực hiện, cần lưu ý rằng tất cả các ví dụ trong bài viết này đều đã được thử nghiệm trên hệ thống Ubuntu 16.04LTS.

Các lệnh nice và renice của Linux​

Trong khi lệnh nice cho phép bạn thực thi một chương trình/quy trình với mức độ ưu tiên lập lịch đã sửa đổi, lệnh renice cho phép bạn thay đổi mức độ ưu tiên lập lịch của một quy trình đang chạy. Sau đây là cú pháp chung cho cả hai lệnh này:
Mã:
nice [OPTION] [COMMAND [ARG]...]
Mã:
renice [-n] priority [[-p] pid ...] [[-g] pgrp ...] [[-u] user ...]
Sau đây là những gì các trang hướng dẫn tương ứng của chúng nói về chúng:
Mã:
Nice: 
 Chạy COMMAND với niceness đã điều chỉnh, ảnh hưởng đến tiến trình schedul?
 ing. Khi không có COMMAND, hãy in niceness hiện tại. Giá trị niceness
 nằm trong khoảng từ -20 (thuận lợi nhất cho tiến trình) đến 19 (ít thuận lợi nhất
 cho tiến trình).
Mã:
Renice:
 Renice thay đổi mức độ ưu tiên lập lịch của một hoặc nhiều tiến trình đang chạy.
 Các tham số who sau đây được hiểu là ID tiến trình, ID nhóm tiến trình hoặc tên người dùng. Renice'ing một nhóm quy trình sẽ khiến tất cả các quy trình trong nhóm quy trình có mức độ ưu tiên lập lịch thay đổi.
 Renice'ing một người dùng sẽ khiến tất cả các quy trình do người dùng sở hữu có mức độ ưu tiên lập lịch thay đổi. Theo mặc định, các quy trình bị ảnh hưởng được chỉ định theo ID quy trình của chúng.
Sau đây là một số ví dụ theo kiểu Hỏi & Đáp sẽ giúp bạn hiểu rõ hơn về cách thức hoạt động của các công cụ này.

Câu hỏi 1. Làm thế nào để kiểm tra mức độ ưu tiên của các chương trình/quy trình đang chạy?​

Vâng, trước tiên bạn nên biết cách kiểm tra mức độ ưu tiên lập lịch hiện tại trước khi thay đổi nó. Nếu liên quan đến quy trình bạn sắp chạy, thì bạn nên biết mức độ ưu tiên lập lịch mặc định luôn là 0.

Ví dụ, chúng tôi đã thực thi quy trình sau:
Mã:
./test-new
Và xác nhận mức độ ưu tiên bằng lệnh sau:
Mã:
ps -lu himanshu | grep test-new
Tại đây, 'himanshu' là người dùng sở hữu quy trình 'test-new'. Sau đây là đầu ra mà lệnh trên tạo ra:
Mã:
0 S 1000 6306 6125 0 80 0 - 508 hrtime pts/18 00:00:00 test-new
Giá trị ở cột thứ 8 là giá trị nice và như bạn thấy, nó bằng không.

Q2. Lệnh nice hoạt động như thế nào?​

Bây giờ quay lại vấn đề chính, lệnh nice hoạt động như thế nào? Rất dễ - chỉ cần sử dụng công cụ theo cách sau:
Mã:
lệnh nice -PRIORITY
Ví dụ, nếu tôi muốn mức độ ưu tiên lập lịch là 10, đây là cách tôi có thể thực hiện:
Mã:
nice -10 ./test-new
Sau đây là đầu ra của lệnh ps trong trường hợp này, xác nhận mức độ ưu tiên đã được thay đổi thành 10.
Mã:
0 S 1000 6694 6125 0 90 10 - 508 hrtime pts/18 00:00:00 test-new

Câu 3. Làm thế nào để nice hoạt động với các giá trị âm?​

Như đã đề cập ở phần đầu, các giá trị niceness nằm trong khoảng từ -20 đến 19, trong đó giá trị trước là thuận lợi nhất, trong khi giá trị sau là ít thuận lợi nhất. Trong trường hợp bạn muốn liên kết một giá trị nice âm với quy trình, thì bạn sẽ phải sử dụng dấu gạch nối kép.

Ví dụ:
Mã:
sudo nice --10 ./test-new
Xin lưu ý rằng bạn cần có quyền root để liên kết một giá trị nice âm với một quy trình. Và chính vì lý do này, lệnh ps của bạn để xác nhận niceness mới phải chứa 'root' thay vì tên người dùng khác.
Mã:
$ ps -lu root | grep test-new
Đây là kết quả đầu ra mà lệnh này tạo ra trong trường hợp của chúng ta:
Mã:
4 S 0 7054 7053 0 70 -10 - 508 - pts/18 00:00:00 test-new
Vì vậy, bạn có thể thấy quy trình hiện đang chạy với giá trị nice là -10.

Câu hỏi 4. Làm thế nào để thêm một giá trị số nguyên được đặt vào niceness?​

Bạn có thể điều chỉnh giá trị nice bằng tùy chọn dòng lệnh -n, tùy chọn này sẽ thêm một giá trị số nguyên được đặt vào niceness. Theo mặc định, giá trị thiết lập này là 10, mặc dù bạn cũng có thể truyền một giá trị khác.
Mã:
-n, --adjustment=N
Ví dụ:
Mã:
nice --adjustment=5 ./test-new
Và đây là đầu ra, lệnh ps tạo ra trong trường hợp này:
Mã:
0 S 1000 7314 6125 0 85 5 - 508 hrtime pts/18 00:00:00 test-new
Vì vậy, bạn có thể thấy mức độ ưu tiên là 5 đã được thiết lập.

Câu hỏi 5. Làm thế nào để thay đổi mức độ ưu tiên của các tiến trình đang chạy?​

Trong khi lệnh nice được sử dụng khi khởi chạy chương trình, lệnh renice cho phép bạn thay đổi mức độ ưu tiên của một tiến trình đang chạy. Ví dụ, đây là cách chúng tôi thay đổi mức độ ưu tiên của tiến trình 'test-new' đang chạy từ 5 thành 15.
Mã:
renice -n 15 -p 7314
Đối số -p dành cho ID tiến trình. Sau đây là đầu ra mà lệnh trên tạo ra:
Mã:
7314 (ID tiến trình) mức độ ưu tiên cũ là 5, mức độ ưu tiên mới là 15
Và giá trị nice thực sự đã được thay đổi thành 15.

Câu hỏi 6. Làm thế nào để thay đổi mức độ ưu tiên cho tất cả các tiến trình thuộc về một nhóm?​

Bạn có thể sử dụng tùy chọn -g cho việc này. Ví dụ:
Mã:
renice -n 20 -g howtoforge
Lệnh trên sẽ thay đổi mức độ ưu tiên của tất cả các tiến trình thuộc về nhóm 'howtoforge'.

Câu hỏi 7. Làm thế nào để thay đổi mức độ ưu tiên cho tất cả các tiến trình thuộc về một người dùng?​

Để thay đổi mức độ ưu tiên cho tất cả các chương trình liên kết với một người dùng, hãy sử dụng tùy chọn -u. Ví dụ:
Mã:
renice -n 5 -u himanshu
Tất nhiên, một người dùng dòng lệnh Linux thông thường sẽ không thường xuyên gặp phải những tình huống cần đến những công cụ này, nhưng việc có kiến thức về các công cụ dòng lệnh quan trọng luôn là điều tốt, và nice và renice nằm trong số đó. Điều tốt là đường cong học tập liên quan đến chúng không hề dốc chút nào. Chúng tôi đã thảo luận về phần lớn các tùy chọn ở đây. Để biết thêm thông tin về các tiện ích này, hãy truy cập trang hướng dẫn của họ - tại đâytại đây.
 
Back
Bên trên