Linux
像在單核機器上一樣執行程序以查找錯誤
我的 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。