主要還是使用以下幾個函式,具體的使用方法,這裡就不多加說明,大佬們說的比較清楚,我這裡直接分享寫的**;
//程序
sched_setaffinity(0
,sizeof
(cpu_set_t)
,&mask)
;sched_getaffinity(0
,sizeof
(cpu_set_t)
,&get)
;//執行緒
pthread_setaffinity_np
(pthread_self()
,sizeof
(mask)
,&mask)
pthread_getaffinity_np
(pthread_self()
,sizeof
(get)
,&get)
sysconf
(_sc_nprocessors_conf)
;cpu_zero
(&mask)
;cpu_isset
(i,&get)
cpu_set
(cpu,
&mask)
;
//set_task_cpu.c
#define _gnu_source
#include
#include
#include
#include
static
intset_task_cpu
(int cpu)
printf
("set pid %d to cpu %d success\n"
,getpid()
,cpu)
;return ret;
}static
intget_task_cpu
(void
)for
(i =
0; i < cpus; i++)}
return0;
}int
main
(char argc,
char
**ar**)
get_task_cpu()
; cpu =
atoi
(ar**[1]
);set_task_cpu
(cpu)
;get_task_cpu()
;return0;
}
列印資訊:
curtis@curtis-virtual-machine:
/mnt/hgfs/share/write_code/set_task_cpu$ .
/a.out 0
enter into set task cpu
system cpu num is 2
system enable cpu num is 2
this porcess 3914 is runing processor 0
this porcess 3914 is runing processor 1
set pid 3914 to cpu 0 success
system cpu num is 2
system enable cpu num is 2
this porcess 3914 is runing processor 0
主要邏輯:清空cpu集合 --> 新增所需cpu集合 --> 設定程序親和性;
首先獲得當前系統所有cpu的核數,我這裡是虛擬機器分配了兩個核,sysconf()函式返回的資料是正確的,然後去判斷當前程序可以在哪些cpu上執行,也可以寫個驅動檢視task_struct -> cpus_allowed的mask,這個位掩碼由 n 位組成,與系統中的 n 個邏輯處理器一一對應,linux預設狀態下mask位全為1,也就是說當前程序可以在cpu0,cpu1上跑,然後呼叫set_task_set()函式,設定cpu的親和性,這裡傳入的引數是0,再次檢查cpu親和位cpu0,說明設定成功。
C 獲取當前程序HASH的方法
用c 實現在這個過程,我們需要進行下面幾個步驟 得到當前程序所對應的本地宿主檔案 開啟這個檔案流 確定hash演算法,計算檔案流的hash 將hash結果轉換為我們熟悉的字串表現形式。下面就分別就這幾個方面來進行解釋。在system.diagnostics命名空間下,有個process類,msdn的...
C 得到當前程序所占用的記憶體
使用sdk的psapi process status helper 中的boolgetprocessmemoryinfo handle process pprocess memory counters ppsmemcounters dword cb typedef struct process me...
C 得到當前程序所占用的記憶體
使用sdk的psapi process status helper 中的boolgetprocessmemoryinfo handle process pprocess memory counters ppsmemcounters dword cb typedef struct process me...