2

Когда мышь нажимается «вниз» на полосе прокрутки приглашения, скажем, во время длинной команды (например, dir /a /s c:\ ), вывод кажется приостановленным.

Мало того, но использование ЦП для cmd.exe падает до нуля, пока мышь остается нажатой. Когда это выпущено, использование ЦП возвращается к нормальному.

Означает ли это, что терминальные команды приостанавливаются таким образом? Или вывод просто приостановлен? Отсутствие использования ЦП подозрительно указывает на приостановку процесса.

3 ответа3

3

Технически, только отображение вывода приостанавливается, пока вы удерживаете полосу прокрутки: консольная подсистема временно прекращает чтение из буфера вывода и его отображение. Тем не менее, процесс остается запущенным, и указанный выходной буфер заполняется очень быстро, что делает весь дальнейший "блок" write() до тех пор, пока буфер заполнен. Это то, что заставляет процесс останавливаться.


(Обратите внимание, что есть два разных компонента - окно консоли и программы, работающие внутри. "Командная строка" является только интерпретатором команд cmd.exe , но CSRSS отображает окно вместе с полосами прокрутки.

2

Мы можем быть окончательными:

ver|time > time1.txt && dir /s && ver|time > time2.txt

Запустите это с и без приостановки вывода, и вы увидите, что время обработки занимает больше времени. Это не просто вывод на паузу.

1

Я бы сказал, что да, процесс перемещается при перемещении полосы прокрутки. Когда я делаю копирование с помощью robocopy и прокручиваю окно вверх, чтобы увидеть, в каком файле я обнаружил ошибку в копии, robocopy ждет, пока она не закончится, и заканчиваю прокрутку, и отпускаю кнопку мыши. Робокопия не работает с жестким диском и не работает в сети, пока я контролирую полосу прокрутки. Как только я отпускаю полосу прокрутки, она переходит на дно, и Robocopy продолжается, как это было.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .