14. [pywin32] SetProcess... 관련 함수

pywin32/win32process|2020. 12. 30. 00:43

1. SetPriorityClass(handle, dwPriorityClass)

 

프로세스의 우선순위 클래스를 설정하는 함수입니다.

 

인자로는 handle : PyHANDLE, dwPriorityClass : int 가 있습니다.

 

handle: 프로세스의 핸들값입니다.

 

dwPriorityClass: 우선순위 클래스로 이전 포스트의 GetPriorityClass 함수를 참조하실 수 있습니다.

 

[pywin32/win32process] - 13. [pywin32] GetProcess... 관련 함수 - 3

 

2. SetProcessAffinityMask(hProcess, mask)

 

CPU 선호도(Affinity)를 설정하는 함수입니다.

 

인자로는 hProcess : PyHANDLE, mask : int 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다.

 

mask: 설정할 CPU 값으로 비트마스크 형식으로 되어있습니다. (CPU0=1, CPU1=2, CPU2=4...., 만약 CPU0,1 둘다 설정하기 위해서는 1+2=3 값을 넣으면 됩니다.) 작업관리자에서 CPU 갯수를 확인할 수 있습니다.

 - SetThreadAffinityMask 함수를 참조하실 수 있습니다.

 

[pywin32/win32process] - 7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수

 

7. [pywin32] SetThreadAffinityMask & SetThreadIdealProcessor 함수

1. int = SetThreadAffinityMask(hThread, ThreadAffinityMask ) 쓰레드의 CPU 선호도를 설정합니다. 선호도란 멀티 프로세서의 경우 어떤 CPU에 작업을 할당할 지를 말합니다. 위의 이미지는 작업관리자 > 프로..

ssjune.tistory.com

 

 

3. SetProcessPriorityBoost(Process, DisablePriorityBoost)

 

프로세스의 동적인 우선순위 레벨 상승이 가능하도록 설정하는 함수입니다.

 

인자로는 Process: PyHANDLE, DisablePriorityBoost : boolean가 있습니다.

 

Thread는 쓰레드의 핸들값입니다.

 

DisablePriorityBoost는 동적인 우선순위 레벨 상승이 가능하게 하는 값으로 True/False 입니다.

 - win32con.TRUE: 동적인 우선순위 레벨 상승을 불가능하게 합니다.

 - win32con.FALSE: 동적인 우선순위 레벨 상승을 가능하게 합니다.

값과 의미가 반대인 것에 주의해야 합니다.

 

 

4. SetProcessShutdownParameters(Level, Flags)

 

프로세스의 셧다운 우선순위와 플래그를 설정하는 함수입니다.

 

인자로는 Level : int, Flags : int 가 있습니다.

 

Level: 우선순위로 다음의 값을 갖습니다. 응용프로그램의 프로세스는 0x100 - 0x3FF중에서 설정해야 하는 듯 합니다.

의미
0x000 - 0x0FF 시스템 프로세스가 셧다운 마지막에 종료됨
0x100 - 0x1FF 응용프로그램 프로세스가 셧다운 마지막에 종료됨
0x200 - 0x2FF 응용프로그램 프로세스가 셧다운 중간에 종료됨
0x300 - 0x3FF 응용프로그램 프로세스가 셧다운 처음에 종료됨
0x400 - 0x4FF 시스템 프로세스가 셧다운 처음에 종료됨

 

Flag: 셧다운 플래그로 다음의 값을 갖습니다.

이름 의미
0 - 기본값
1 win32con.SHUTDOWN_NORETRY 프로세스를 종료하는데 지정된 시간보다 오래 걸릴 시 재시도 대화상자를 띄위지 않고 프로세스를 종료함

 

 

5. SetProcessWorkingSetSize(hProcess, MinimumWorkingSetSize, MaximumWorkingSetSize)

 

프로세스이 워킹 셋의 최소/최대 사이즈를 설정하는 함수입니다.

 

인자로는 hProcess : PyHANDLE, MinimumWorkingSetSize : int, MaximumWorkingSetSize : int 가 있습니다.

 

hProcess: 프로세스의 핸들값입니다.

 

MinimumWorkingSetSize: 최소로 설정할 사이즈입니다. (바이트 단위), 설정할 수 있는 최소값은 20page로 만약 1page에 4K(4096 Bytes)라면 최소 81920 Bytes 부터 설정해야 합니다.

 

MaximumWorkingSetSize: 최대로 설정할 사이즈입니다. (바이트 단위), 최소 13page(53248 Bytes) 이상의 값을 설정해야 하며, 최대 시스템에서 지원하는 최대값에서 512page를 뺀 값까지 설정할 수 있습니다.

 

만약 MinimumWorkingSetSize와 MaximumWorkingSetSize가 둘다 -1로 설정한다면, 프로세스의 워킹 셋에서 가능한 많은 page를 제거합니다.

 

 

import win32process
import win32con
import win32event

prog = "C:/Users/admin/Documents/notepad.exe"
# 프로그램 경로

pinfo = win32process.STARTUPINFO()

pHandle = win32process.CreateProcess(prog, None, None, None, win32con.FALSE, \
                                     win32con.CREATE_NEW_CONSOLE, None, None, pinfo)

win32event.WaitForSingleObject(pHandle[0], 2000)

priorityClass = win32process.GetPriorityClass(pHandle[0])
affinityMask = win32process.GetProcessAffinityMask(pHandle[0])
priorityBoost = win32process.GetProcessPriorityBoost(pHandle[0])
shutdownParam = win32process.GetProcessShutdownParameters()
workingSize = win32process.GetProcessWorkingSetSize(pHandle[0])

print(f"priorityClass : {priorityClass}")
print(f"affinityMask : {affinityMask}")
print(f"priorityBoost : {priorityBoost}")
print(f"shutdownParam : {shutdownParam}")
print(f"workingSize : {workingSize}")

win32process.SetPriorityClass(pHandle[0], win32process.HIGH_PRIORITY_CLASS)
win32process.SetProcessAffinityMask(pHandle[0], 0x01)
win32process.SetProcessPriorityBoost(pHandle[0], win32con.TRUE)
win32process.SetProcessShutdownParameters(0x100, win32con.SHUTDOWN_NORETRY)
win32process.SetProcessWorkingSetSize(pHandle[0], -1, -1)


priorityClass = win32process.GetPriorityClass(pHandle[0])
affinityMask = win32process.GetProcessAffinityMask(pHandle[0])
priorityBoost = win32process.GetProcessPriorityBoost(pHandle[0])
shutdownParam = win32process.GetProcessShutdownParameters()
workingSize = win32process.GetProcessWorkingSetSize(pHandle[0])

print(f"new priorityClass : {priorityClass}")
print(f"new affinityMask : {affinityMask}")
print(f"new priorityBoost : {priorityBoost}")
print(f"new shutdownParam : {shutdownParam}")
print(f"new workingSize : {workingSize}")

위의 코드를 실행한 결과입니다.

 

 

 

 

반응형

댓글()