Tôi đoán vấn đề bạn muốn giải quyết là bạn có một số quy trình đang chạy trên hộp của bạn mà đôi khi hoạt động sai, và ngồi mãi mãi chốt một lõi.
Điều đầu tiên bạn muốn làm là cố gắng sửa chương trình phát điên. Đó là giải pháp tốt nhất. Tôi sẽ giả định rằng điều đó là không thể, hoặc bạn cần một cái kluge nhanh để giữ cho hộp của bạn chạy cho đến khi nó được cố định.
Bạn, tối thiểu, muốn giới hạn tập lệnh của bạn chỉ nhấn vào một chương trình bạn quan tâm. Sẽ tốt nhất nếu quyền hạn chế tập lệnh của bạn như thế này (ví dụ: tập lệnh của bạn chạy với tư cách người dùng X, điều duy nhất khác chạy dưới dạng X là chương trình).
Thậm chí tốt hơn là sử dụng một cái gì đó như ulimit -t
để giới hạn tổng thời gian CPU mà chương trình có thể sử dụng. Tương tự, nếu nó tiêu thụ hết bộ nhớ, hãy kiểm tra ulimit -v
. Hạt nhân thi hành các giới hạn này; xem bash
trang hướng dẫn (đây là phần tích hợp sẵn) và setrlimit(2)
trang này để biết chi tiết.
Nếu vấn đề không phải là một quá trình chạy amok, mà thay vào đó chỉ là quá nhiều quá trình đang chạy, thì hãy thực hiện một số hình thức khóa để ngăn không cho X chạy (hoặc điều này sẽ trở nên quen thuộc ulimit -u
). Bạn cũng có thể xem xét thay đổi mức độ ưu tiên của trình lập lịch biểu của các quy trình đó (sử dụng nice
hoặc renice
) hoặc thậm chí quyết liệt hơn, sử dụng sched_setscheduler
để thay đổi chính sách thành SCHED_IDLE
.
Nếu bạn cần kiểm soát nhiều hơn, hãy xem một nhóm kiểm soát (cgroups). Tùy thuộc vào nhân bạn đang chạy, bạn thực sự có thể giới hạn thời gian CPU, bộ nhớ, I / O, v.v ... mà cả một nhóm các quy trình cùng nhau tiêu thụ. Các nhóm kiểm soát khá linh hoạt; họ có thể làm bất cứ điều gì bạn đang cố gắng làm, mà không cần bất kỳ klug mỏng manh nào. Arch Linux Wiki có phần giới thiệu về các nhóm đáng đọc, cũng như loạt cgroups của Neil Brown tại LWN.
while [ 1 ]
làm cho tôi tự hỏi bao nhiêu CPU kịch bản này sẽ tiêu thụ. Ngoài ra, 3 cuộc gọi đếnkill -9
trong một kịch bản chạy liên tục? Điều này mang lại cho tôi cảm giác ớn lạnh ...