當前位置:首頁 » 操作系統 » linux設置優先順序

linux設置優先順序

發布時間: 2023-01-06 17:06:31

『壹』 如何修改linux系統中進程的優先順序

可以用nice和renice

nice設定進程相對優先順序
-20~19 共40個級別,nice值越大,優先順序越低

renice 重新設定優先順序
renice [nice level] [PID]
-n:指定許可權

-u:指定用戶姓名或ip
-g:指定組
-p:進程PID

例: renice +1 987 -u test root -p 32 ##更改PID為987和32的nice level,外加所有root和test擁有的進程

『貳』 如何在linux/unix中設置線程的優先順序

我們使用int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg);
來創建線程,但是如何設置線程的優先順序呢?
在討論這個問題的時候,我們先要確定當前線程使用的調度策略,posix提供了
int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);函數來獲取所
使用的調度策略,它們是:SCHED_FIFO, SCHED_RR 和 SCHED_OTHER。
我們可以使用
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
來獲取線程線程可是設置的最大和最小的優先順序值,如果調用成功就返回最大和最小的優先順序值,否則返回-1。
從我現在運行的linux系統中,我使用下列程序(程序見附錄)獲取了對應三種調度策略中的最大和最小優先順序:
policy = SCHED_OTHER
Show current configuration of priority
max_priority = 0
min_priority = 0
Show SCHED_FIFO of priority
max_priority = 99
min_priority = 1
Show SCHED_RR of priority
max_priority = 99
min_priority = 1
Show priority of current thread
priority = 0
Set thread policy
Set SCHED_FIFO policy
policy = SCHED_FIFO
Set SCHED_RR policy
policy = SCHED_RR
Restore current policy
policy = SCHED_OTHER
我們可以看到
SCHED_OTHER是不支持優先順序使用的,而SCHED_FIFO和SCHED_RR支持優先順序的使用,他們分別為1和99,數值越大優先順序越高。 從上面的結果我們可以看出,如果程序控制線程的優先順序,一般是用pthread_attr_getschedpolicy來獲取系統使用的調度策略,如果是SCHED_OTHER的話,表明當前策略不支持線程優先順序的使用,否則可以。當然所設定的優先順序范圍必須在最大和最小值之間。我們可以通過sched_get_priority_max和sched_get_priority_min來獲取。
可能網友會問,是否我們可以通過int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);來設定自己所需的調度策略呢?我覺得是完全可以的(有些系統需要定義_POSIX_THREAD_PRIORITY_SCHEDULING),只要系統實現了對應的調用策略。
說了半天,我們還沒有說,在系統允許使用線程優先順序別的時候,如何設置優先順序別呢?
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
上面兩個函數分別用於設置線程的優先順序,struct sched_param的定義如下
struct sched_param
{
int __sched_priority; //所要設定的線程優先順序
};
例:創建優先順序為10的線程
pthread_attr_t attr;
struct sched_param param;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR);
param.sched_priority = 10;
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(xxx , &attr , xxx , xxx);
pthread_attr_destroy(&attr);

附:使用的測試程序:
#include <iostream>
#include <pthread.h>
#include <sched.h>
#include <assert.h>
using namespace std;
static int get_thread_policy( pthread_attr_t &attr )
{
int policy;
int rs = pthread_attr_getschedpolicy( &attr, &policy );
assert( rs == 0 );
switch ( policy )
{
case SCHED_FIFO:
cout << "policy = SCHED_FIFO" << endl;
break;
case SCHED_RR:
cout << "policy = SCHED_RR" << endl;
break;
case SCHED_OTHER:
cout << "policy = SCHED_OTHER" << endl;
break;
default:
cout << "policy = UNKNOWN" << endl;
break;
}
return policy;
}
static void show_thread_priority( pthread_attr_t &attr, int policy )
{
int priority = sched_get_priority_max( policy );
assert( priority != -1 );
cout << "max_priority = " << priority << endl;
priority = sched_get_priority_min( policy );
assert( priority != -1 );
cout << "min_priority = " << priority << endl;
}
static int get_thread_priority( pthread_attr_t &attr )
{
struct sched_param param;
int rs = pthread_attr_getschedparam( &attr, ¶m );
assert( rs == 0 );
cout << "priority = " << param.__sched_priority << endl;
return param.__sched_priority;
}
static void set_thread_policy( pthread_attr_t &attr, int policy )
{
int rs = pthread_attr_setschedpolicy( &attr, policy );
assert( rs == 0 );
get_thread_policy( attr );
}
int main( void )
{
pthread_attr_t attr;
struct sched_param sched;
int rs;
rs = pthread_attr_init( &attr );
assert( rs == 0 );
int policy = get_thread_policy( attr );
cout << "Show current configuration of priority" << endl;
show_thread_priority( attr, policy );
cout << "Show SCHED_FIFO of priority" << endl;
show_thread_priority( attr, SCHED_FIFO );
cout << "Show SCHED_RR of priority" << endl;
show_thread_priority( attr, SCHED_RR );
cout << "Show priority of current thread" << endl;
int priority = get_thread_priority( attr );
cout << "Set thread policy" << endl;
cout << "Set SCHED_FIFO policy" << endl;
set_thread_policy( attr, SCHED_FIFO );
cout << "Set SCHED_RR policy" << endl;
set_thread_policy( attr, SCHED_RR );
cout << "Restore current policy" << endl;
set_thread_policy( attr, policy );

rs = pthread_attr_destroy( &attr );
assert( rs == 0 );
return 0;
}

編譯命令:
#g++ pthread_priority3.c -o pthread_priority3 -lpthread

『叄』 如何修改linux系統中進程的優先順序

可以用nice和renice
nice設定進程相對優先順序
-20~19
共40個級別,nice值越大,優先順序越低
renice
重新設定優先順序
renice
[nice
level]
[PID]
-n:指定許可權
-u:指定用戶姓名或ip
-g:指定組
-p:進程PID
例:
renice
+1
987
-u
test
root
-p
32
##更改PID為987和32的nice
level,外加所有root和test擁有的進程

『肆』 linux下如何設置擴展網卡的優先順序

在linux系統中,使用ifconfig命令給網口配置ip,系統會自動生成這個網卡的相關路由信息,可以使用命令route –n查看系統所有的路由信息,參數-n是不進行地址解析,如果不添加-n選項,route命令會根據/etc/resolv文件中配置的DNS伺服器進行地址解析,所以返回時間跟DNS伺服器的響應時間有關系:

系統自動生成eth0的路由信息

可以看到系統自動生成了201網段的路由信息,凡是201這個網段的數據包都會通過eth0這個網口。但是目前還沒有網關的信息,如果要通過eth0訪問外網,還需要添加默認網關,linux系統中可以通過命令ip route命令添加默認網關,命令格式為ip route add default via <gateway> dev <interface>:

eth0的路由信息

添加默認網關後的路由信息如上圖,其中Destination和Genmask為0.0.0.0的記錄表明這是系統默認網關,默認網關的意思是當要發送數據包的目標網路地址不在系統的路由記錄中時,系統會將該數據包通過默認網關對應的介面(網卡)發送出去,如果允許使用dhcp的話,還可以直接使用udhcpc命令,該命令會自動獲取ip並設置默認網關:

測試效果

路由信息在板卡重啟之後會消失,板卡上自帶乙太網可以通過英創公司提供的userinfo.txt配置文件來設置乙太網的ip和默認網關,或者設置為dhcp的方式。如果有擴展的wi-fi模塊則可以通過腳本或自己保存一個配置文件來實現載入網口後自動進行設置ip和網關。3G/4G網路是使用的ppp撥號,ppp會自動生成默認網關。

『伍』 linux操作系統設置優先順序的問題

linux下調整進程優先順序
進程的優先順序決定了進程是否優先被cpu分配資源進行處理。
在cpu資源十分充足時,每個正在運行的進程都能分配到足夠的資源進行處理,此時調整進程的優先順序是沒有什麼意義的;
如果cpu資源緊張時,top查看cpu使用達到90%以上時,優先順序高的進程將被優先分配資源去執行。
如果此時手頭有一個非常緊要的任務要執行,比如傳輸一個非常重要的數據或是准備給客戶發一封非常緊急的郵件,
你希望這些任務優先地被執行完成,那麼就需要調整這些任務的優先順序了。
優先順序的值=優先系數+nice值
優先系數由系統內核決定,不可更改
nice值可以手動更改,范圍是
-20~19
優先順序的值越低,優先順序越高;優先順序的值越高,優先順序越低。
所以想調整成最高優先順序的話,就將nice值設為-20;想調整成最低優先順序的話,將nice值設為19。
調整優先順序:
1、任務未運行前進行調整
#
nice
-n-20
sh
/xxx/xxx.sh
--以最高優先順序運行xxx.sh這個腳本
#
nice
-n19
sh
/xxx/xxx.sh
--以最低優先順序運行xxx.sh這個腳本
2、任務已經開始運行的情況下調整

#
top
--查看系統當前進程運行情況
>
r
--鍵入小r
>
PID
to
renice:
--提示輸入運行的進程的pid
>
Renice
PID
23302
to
value:
--把這個進程的nice值設置為多少,根據需要進行調整

#
renice
-20
PID
將進程的nice值改為-20
#
renice
19
PID
將進程的nice值改為19
轉載紅黑聯盟:linux下調整進程優先順序

『陸』 linux內核線程怎麼設置優先順序

Linux內核的三種調度策略:
1,SCHED_OTHER 分時調度策略,
2,SCHED_FIFO實時調度策略,先到先服務。一旦佔用cpu則一直運行。一直運行直到有更高優先順序任務到達或自己放棄
3,SCHED_RR實時調度策略,時間片輪轉。當進程的時間片用完,系統將重新分配時間片,並置於就緒隊列尾。放在隊列尾保證了所有具有相同優先順序的RR任務的調度公平
Linux線程優先順序設置
首先,可以通過以下兩個函數來獲得線程可以設置的最高和最低優先順序,函數中的策略即上述三種策略的宏定義:
int sched_get_priority_max(int policy);
int sched_get_priority_min(int policy);
SCHED_OTHER是不支持優先順序使用的,而SCHED_FIFO和SCHED_RR支持優先順序的使用,他們分別為1和99,數值越大優先順序越高。
設置和獲取優先順序通過以下兩個函數:
int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);
int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);
例如以下代碼創建了一個優先順序為10的線程:
struct sched_param
{
int __sched_priority; //所要設定的線程優先順序
};
例:創建優先順序為10的線程
pthread_attr_t attr;
struct sched_param param;
pthread_attr_init(&attr);
pthread_attr_setschedpolicy(&attr, SCHED_RR);
param.sched_priority = 10;
pthread_attr_setschedparam(&attr, ¶m);
pthread_create(xxx , &attr , xxx , xxx);
pthread_attr_destroy(&attr);

『柒』 淺析Linux下進程的調度策略與優先順序

在 Linux 中,線程是由進程來實現的,可以認為線程就是一個輕量級的進程,因此,線程調度是按照進程調度的方式來進行的。這樣設計,線程調度流程可以直接復用進程調度流程,沒必要再設計一個進程內的線程調度器了。

在 Linux 中,進程調度器是基於進程的調度策略與調度優先順序來決定調度哪個進程運行。

調度策略主要包括:

調度優先順序的范圍是 0~99,數值越大,表示優先順序越高。

其中,SCHED_OTHER、SCHED_IDLE、SCHED_BACH 為非實時調度策略,其調度優先順序為 0。而 SCHED_FIFO、SCHED_RR 是實時調度策略,其調度優先順序范圍為 1~99。

實時調度策略的進程總是比非實時調度策略的進程優先順序高。

在 Linux 內部實現中,調度器會為每個可能的調度優先順序維護一個可運行的進程列表,以最高優先順序列表頭部的進程作為下一次調度的進程,所有的調度都是搶占式的,如果一個具有更高調度優先順序的進程轉換為可運行狀態,那麼當前運行的進程將被強制進入其等待的隊列中。

SCHED_OTHER

該調度策略是默認的 Linux 分時調度策略,該調度策略為非實時的,其調度優先順序總是為 0。

對於該調度策略類型的進程,調度器是基於動態優先順序來調度的。動態優先順序跟屬性 nice 有關,nice 的值會隨著進程的運行時間而動態改變,以確保所有具有 SCHED_OTHER 策略的進程公平地得到調度。

在 Linux 中,nice 的值范圍為-20 ~ +19,默認值為 0。nice 值越大,則優先順序越低,因此相對較低 nice 值的進程可以獲得更多的處理器時間。

通過命令 ps -el 查看系統中的進程列表,其中 NI 列就是進程對應的 nice 值。

使用 top 命令,看到的 NI 列也是進程的 nice 值。

調整 nice 值,可以通過 shell 命令 nice ,該命令可以按照指定的 nice 值運行 cmd ,命令的幫助信息為:

重新調整已運行進程的 nice 值,可通過 renice 命令實現,命令的幫助信息為:

另外,可以執行 top 命令,輸入 r ,根據提示輸入進程的 pid ,再輸入 nice 數值,也可以調整進程的 nice 值。

SCHED_FIFO

該調度策略為先入先出調度策略,簡單概括,就是一旦進程佔用了 CPU,則一直運行,直到有更高優先順序的任務搶占,或者進程自己放棄佔用 CPU。

SCHED_RR

該調度策略為時間片輪轉調度策略,該調度策略是基於 SCHED_FIFO 策略的演進,其在每個進程上增加一個時間片限制,當時間片使用完成後,調度器將該進程置於隊列的尾端,放在尾端保證了所有具有相同調度優先順序的進程的調度公平。

使用 top 命令,如果 PR 列的值為 RT ,則說明該進程採用的是實時調度策略,其調度策略為 SCHED_FIFO 或者 SCHED_RR,而對於非實時調度策略的進程,該列的值為 NI + 20 。

可以通過命令 ps -eo state,uid,pid,ppid,rtprio,time,comm 來查看進程對應的實時優先順序,實時優先順序位於 RTPRIO 列下,如果進程對應的列顯示為 - ,說明該進程不是實時進程。

chrt 命令可以用來很簡單地更改進程的調度策略與調度優先順序。在 Linux 下查看 chrt 命令的幫助信息:

比如,獲取某個進程的調度策略,使用如下命令:

在比如,設置某個進程的調度策略為 SCHED_FIFO,調度優先順序為 70,使用如下命令:

『捌』 在Linux下怎麼修改當前線程的優先順序

注意:盡量不要修改系統默認優先順序

Thread類與線程優先順序相關的屬性和方法:

MAX_PRIORITY : 線程可以具有最高優先順序
MIN_PRIORITY : 線程可以具有的最低優先順序
NORM_PRIORITY : 分配給線程的默認優先順序
getPriority() : 獲得線程的優先順序
setPriority() : 修改線程的優先順序

java">importjava.util.Scanner;

{

publicstaticThread[]getThreads(){
ThreadGroupgroup=Thread.currentThread().getThreadGroup();
Thread[]threads=newThread[group.activeCount()];
group.enumerate(threads);
System.out.println("線程ID "+"線程名稱 "+"線程優先順序");
for(Threadthread:threads){
System.out.println(thread.getId()+" "+thread.getName()+" "+thread.getPriority());;

}
returnthreads;

}
publicstaticStringinput(){
Scannersc=newScanner(System.in);
Stringstr=sc.nextLine();
returnstr;
}

(Thread[]threads){
System.out.println("請輸入您要修改的線程的ID");
inti=Integer.parseInt(input());
intcount=-1;
for(Threadthread:threads){
if(thread.getId()==i){
System.out.println("請輸入您要修改成的優先順序別:");
intpriroty=Integer.parseInt(input());
thread.setPriority(priroty);
break;
}else{
count++;
}
}
if(count==threads.length-1){
System.out.println("找不到您要的線程");
}
getThreads();

}
publicstaticvoidmain(String[]args){
modifyPriority(getThreads());
}
}

『玖』 linux進程優先順序設置

你所說的linux系統的優先順序數確實是這樣的。需要注意的是普通用戶只能在0~19之間調整應用程序的優先權值,只有超級用戶有權調整更高的優先權值(從-20~19)。linux系統屬於這種數值越小優先順序越高,數值越大優先順序越低的系統。windows屬於那種優先數值大的優先順序高的系統。其他的就不大清楚

熱點內容
加密殼sdk 發布:2025-05-12 07:38:29 瀏覽:509
電腦網線通伺服器 發布:2025-05-12 07:34:59 瀏覽:681
訪問法概念 發布:2025-05-12 07:27:14 瀏覽:406
遺傳演算法例子 發布:2025-05-12 07:27:11 瀏覽:267
matlab語言編程 發布:2025-05-12 07:05:16 瀏覽:483
解壓油畫棒 發布:2025-05-12 06:56:56 瀏覽:716
如何安裝語言編譯器 發布:2025-05-12 06:55:05 瀏覽:301
c語言程序設計題目 發布:2025-05-12 06:46:46 瀏覽:713
虛擬機上傳文件 發布:2025-05-12 06:41:52 瀏覽:572
編程模特 發布:2025-05-12 06:41:51 瀏覽:271