[英]Assigning a cpu core to a process - Linux
有沒有辦法強制進行具有特定PID的進程,只能在服務器的一個cpu上執行和運行? 我知道有這樣的命令
taskset -cp <Cpu_Number> <Pid>
但上面的命令在我的系統上不起作用。 如果還有其他命令,請告訴我。
有兩種方法可以將cpu核心/核心分配給正在運行的進程。
第一種方法:
taskset -cp 0,4 9030
很清楚! 將cpu核0和4分配給pid 9030。
第二種方法:
taskset -p 0x11 9030
這有點復雜。 -p
后面的十六進制數是一個位掩碼。 可在此處找到解釋,其摘錄如下:
CPU親和性表示為位掩碼,最低位對應於第一個邏輯CPU,最高位對應於最后一個邏輯CPU。 並非所有CPU都可能存在於給定系統上,但掩碼可能指定的CPU數量多於現有CPU數量。 檢索到的掩碼將僅反映與系統上物理上的CPU相對應的位。 如果給出了無效掩碼(即,對應於當前系統上沒有有效CPU的掩碼),則返回錯誤。 掩碼通常以十六進制給出。
仍然困惑? 看下圖:
我添加了對應於十六進制數的二進制文件,處理器從左開始從零開始計數。 在第一個例子中,位掩碼中有one
對應於第zero
個處理器,因此處理器將被啟用進程。 所有處於zero
位掩碼中相應位置的處理器都將被禁用。 事實上,這就是它被稱為面具的原因。
說完所有這些后,使用taskset更改處理器關聯性需要:
用戶必須擁有CAP_SYS_NICE才能更改進程的CPU關聯。 任何用戶都可以檢索關聯掩碼。
您可能有興趣看一下處理CAP_SYS_NICE的SO問題 。
我的資源
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.