![В CMD.exe «start sh.exe» создает процесс conhost, который занимает 700 МБ памяти.](https://rvso.com/image/1482458/%D0%92%20CMD.exe%20%C2%ABstart%20sh.exe%C2%BB%20%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D1%82%20%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%20conhost%2C%20%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9%20%D0%B7%D0%B0%D0%BD%D0%B8%D0%BC%D0%B0%D0%B5%D1%82%20700%20%D0%9C%D0%91%20%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8..png)
В остальном Git bash (sh.exe) занимает мало памяти, но при запуске с помощью команды CMD start sh.exe
он создает процесс conhost.exe, который занимает 3–700 МБ памяти.
Интересно, start cmd /k sh.exe
что делает то же самое, но создает процесс conhost, который занимает всего 8 МБ.
Почему запуск sh.exe с помощью команды «start» создает процесс conhost, который занимает гораздо больше памяти?
решение1
хорошо, я посмотрел обаследы с WPA.exe. В трассировке, которая показывает высокое использование памяти, использование памяти происходит из-за создания экранного буфера DoCreateScreenBuffer
:
Line #, Process, Commit Stack, Address, Count, Impacting Size, Size
1, conhost.exe (10848), [Root], , 46, 800784384, 800833536
2, , |- ntdll.dll!RtlUserThreadStart, , 31, 800669696, 800673792
3, , | kernel32.dll!BaseThreadInitThunk, , 31, 800669696, 800673792
4, , | |- ConhostV2.dll!ConsoleIoThread, , 13, 800509952, 800509952
5, , | | ConhostV2.dll!ConsoleHandleConnectionRequest, , 13, 800509952, 800509952
6, , | | ConhostV2.dll!ConsoleAllocateConsole, , 13, 800509952, 800509952
7, , | | |- ConhostV2.dll!SetUpConsole, , 10, 800460800, 800460800
8, , | | | |- ConhostV2.dll!AllocateConsole, , 7, 800432128, 800432128
9, , | | | | ConhostV2.dll!DoCreateScreenBuffer, , 7, 800432128, 800432128
10, , | | | | |- ConhostV2.dll!SCREEN_INFORMATION::CreateInstance, , 6, 800415744, 800415744
11, , | | | | | ConhostV2.dll!TEXT_BUFFER_INFO::CreateInstance, , 6, 800415744, 800415744
12, , | | | | | |- ConhostV2.dll!DBCS_SCREEN_BUFFER::CreateInstance, , 4, 599891968, 599891968
13, , | | | | | | ntdll.dll!RtlpAllocateHeapInternal, , 4, 599891968, 599891968
14, , | | | | | | ntdll.dll!RtlpAllocateHeap, , 4, 599891968, 599891968
15, , | | | | | | ntdll.dll!NtAllocateVirtualMemory, , 4, 599891968, 599891968
16, , | | | | | | ntoskrnl.exe!KiSystemServiceCopyEnd, , 4, 599891968, 599891968
17, , | | | | | | ntoskrnl.exe!NtAllocateVirtualMemory, , 4, 599891968, 599891968
18, , | | | | | | ntoskrnl.exe! ?? ::NNGAKEGL::`string', , 4, 599891968, 599891968
One start cmd /k sh.exe
не делает этого выделения памяти. Здесь печатаются только некоторые символы, что использует всего 69kB.
Line #, Process, Commit Stack, Address, Count, Impacting Size, Size
7, conhost.exe (10072), [Root], , 2, 81920, 81920
8, , ntdll.dll!RtlUserThreadStart, , 2, 81920, 81920
9, , kernel32.dll!BaseThreadInitThunk, , 2, 81920, 81920
10, , |- ConhostV2.dll!ConsoleIoThread, , 1, 69632, 69632
11, , | ConhostV2.dll!SrvWriteConsole, , 1, 69632, 69632
12, , | ConhostV2.dll!DoSrvWriteConsole, , 1, 69632, 69632
13, , | ConhostV2.dll!DoWriteConsole, , 1, 69632, 69632
14, , | ConhostV2.dll!WriteChars, , 1, 69632, 69632
15, , | ConhostV2.dll!WriteCharsLegacy, , 1, 69632, 69632
16, , | ConhostV2.dll!WriteRegionToScreen, , 1, 69632, 69632
17, , | ConhostV2.dll!ConsolePolyTextOut, , 1, 69632, 69632
18, , | ntdll.dll!RtlpAllocateHeapInternal, , 1, 69632, 69632
19, , | ntdll.dll!RtlpAllocateHeap, , 1, 69632, 69632
20, , | ntdll.dll!RtlpCommitBlock, , 1, 69632, 69632
21, , | ntdll.dll!NtAllocateVirtualMemory, , 1, 69632, 69632
22, , | ntoskrnl.exe!KiSystemServiceCopyEnd, , 1, 69632, 69632
23, , | ntoskrnl.exe!NtAllocateVirtualMemory, , 1, 69632, 69632
24, , | ntoskrnl.exe! ?? ::NNGAKEGL::`string', , 1, 69632, 69632
25, , | , 0x2a657431000, 1, 69632, 69632
Но я понятия не имею, почему это происходит. Запускайте его всегда с помощью start cmd /k.