Linux

像在單核機器上一樣執行程序以查找錯誤

  • January 17, 2022

我的 Linux 應用程序中有一個錯誤,只能在單核 CPU 上重現。為了調試它,我想從命令行啟動程序,這樣即使在我的多處理器機器上它也被限制為 1 個 CPU。

是否可以為特定程序更改它,例如執行它以便它不在多個處理器上執行(它的)多個執行緒?

您可以使用來自.util-linux

遮罩可以用十六進制指定(帶或不帶前導“0x”),或作為帶有 –cpu-list 選項的 CPU 列表。例如,

       0x00000001  is processor #0,

       0x00000003  is processors #0 and #1,

       0xFFFFFFFF  is processors #0 through #31,

       32          is processors #1, #4, and #5,

       --cpu-list 0-2,6
                   is processors #0, #1, #2, and #6.

   When  taskset returns, it is guaranteed that the given program has been
   scheduled to a legal CPU.

正如@Ipor 的回答中提到的,將程序限制為一個可能使用的 CPU 硬體核心/執行緒taskset 1 prog [args]

此外,還有一種方法可以明確禁止複製程序(不確定使用的應用程序,fork僅檢查clone系統呼叫)。

限製程序可以擁有的程序數(執行緒)的程序是prlimit --nproc=1 prog [args]. 我嘗試使用它rsync並得到“叉子不可用…… IPC 中的錯誤”,最後 -rsync寫成不能作為一個執行緒工作。

strace prlimit --nproc=1 rsync  

執行strace已顯示,如下面的 SO 連結中所述,來自clone呼叫的返回值是-1 EAGAIN (resource temporary unavailable).

PS 想法取自https://stackoverflow.com/questions/38637451/is-there-a-way-force-a-program-to-use-only-1-thread

引用自:https://unix.stackexchange.com/questions/467678