내 Linux 애플리케이션에는 단일 코어 CPU에서만 재현될 수 있는 버그가 있습니다. 디버깅하려면 명령줄에서 프로세스를 시작하여 다중 프로세서 컴퓨터에서도 CPU 1개로 제한하고 싶습니다.
특정 프로세스에 대해 이를 변경할 수 있습니까? 예를 들어 여러 프로세서에서 여러 스레드를 실행하지 않도록 실행합니까?
답변1
당신은 그것을 사용할 수 있습니다작업 세트에서 util-linux
.
마스크는 16진수(앞에 "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.
답변2
@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.