2008-08-27 22 views
11

Trên Windows tôi có thể làm:Đổi độ ưu tiên của quá trình hiện tại trong C

HANDLE hCurrentProcess = GetCurrentProcess(); 

SetPriorityClass(hCurrentProcess, ABOVE_NORMAL_PRIORITY_CLASS); 

Làm thế nào tôi có thể làm điều tương tự trên * nix?

+0

http://stackoverflow.com/questions/29621/change-own-process-priority-in-c –

+0

Bạn có thể làm giảm của bạn ưu tiên của quá trình riêng mà không phải là superuser? –

+0

Có, mặc dù bạn thường không thể nâng cấp lại. – thelsdj

Trả lời

22

Hãy thử:

#include <sys/time.h> 
#include <sys/resource.h> 

int main(){ 
    setpriority(PRIO_PROCESS, 0, -20); 
} 

Lưu ý rằng bạn phải chạy như superuser để làm việc này.

(để biết thêm, loại 'người đàn ông setpriority' tại dấu nhắc.)

1

@ Allain

Bạn có thể làm giảm quá trình ưu tiên của riêng bạn mà không bị superuser?

Chắc chắn. Tuy nhiên, hãy nhận biết rằng đây là một con đường một chiều. Bạn thậm chí không thể quay lại nơi bạn đã bắt đầu. Và thậm chí mức giảm ưu tiên khá nhỏ cũng có thể có những hiệu ứng đáng ngạc nhiên lớn trong thời gian chạy khi có tải trọng đáng kể trên hệ thống.

4

Nếu thực hiện điều gì đó như thế này, hãy bỏ chọn công việc của bạn và đặt bit s. Sau đó, bạn có thể thay đổi người bạn đang chạy, ưu tiên của bạn là gì, lập lịch trình chuỗi, v.v. vào thời gian chạy. Nó là tuyệt vời miễn là bạn không viết một ứng dụng đa luồng ồ ạt với một lỗi trong nó để bạn đi qua một hộp CPU 48 và không ai có thể tắt bạn xuống vì bạn có mỗi CPU quay 100% với tất cả các chủ đề đặt thành SHED_FIFO (chạy đến khi hoàn thành) chạy dưới dạng gốc.

Nah .. Tôi sẽ không nói từ kinh nghiệm ....

Các vấn đề liên quan