2015-11-30 94 views
5

有沒有什麼辦法強制進程使用特定的PID,只能在服務器的一個cpu上執行和運行?我知道有這樣的命令將cpu內核分配給進程 - Linux

taskset -cp <Cpu_Number> <Pid> 

但上述命令不起作用在我的系統上。所以請讓我知道是否有其他命令。

+1

什麼是服務器操作系統?用戶必須擁有'CAP_SYS_NICE'才能更改進程的CPU關聯性。任何用戶都可以檢索親和力掩碼。 – sjsam

+0

擺脫剛剛發佈的問題是不公平的。請等待直接評論。評論通常對你的問題的澄清有用 – sjsam

回答

5

有兩種方法可以將cpu核心/核心分配給正在運行的進程。

第一種方法:

taskset -cp 0,4 9030 

很清楚!分配CPU內核0和4到PID 9030.

第二種方法:

taskset -p 0x11 9030 

這是更復雜一些。跟在-p之後的十六進制數字是一個位掩碼。的說明可以發現here,摘錄其下面給出:

的CPU親和力表示爲一個位掩碼,以最低階 位對應於所述第一邏輯CPU和最高階位對應於 最後一個邏輯CPU。並非所有CPU都可能存在於給定系統的 中,但掩碼可指定比當前更多的CPU。 A 檢索到的掩碼將僅反映物理上在系統上對應於CPU 的位。如果給出無效掩碼(即 對應於當前系統上沒有有效的CPU),則返回一個錯誤 。掩碼通常以十六進制表示。

還困惑嗎?請看下面的圖像:

enter image description here

我已經加入對應於十六進制數的二進制文件和處理器從零左邊開始計數。在第一個示例中,與zero th處理器對應的位掩碼中有一個one,因此將爲處理啓用處理器。所有在位掩碼中具有zero的處理器都將被禁用。實際上這就是它被稱爲面具的原因。

說了這些,採用使用taskset改變處理器親和力要求:

用戶必須擁有CAP_SYS_NICE改變 過程的CPU的親和力。任何用戶都可以檢索親和力掩碼。

請檢查Capabalities Man Page

你可能有興趣看看這個處理CAP_SYS_NICE的SO Question

我的資源

  1. Tutorials Point

  2. XModulo

+0

@mahdi:我可以知道你是如何整理出來的嗎? – sjsam

+0

您提供的第二種方法是第一種方法的另一種表示形式嗎?或者第二種方法對CPU分配有更強的影響? – Admia

+0

我相信它沒有更強的效果。這只是另一種表示。 – sjsam