3

Я запускаю сборку программного обеспечения в Visual Studio 2005 на Win XP через командную строку (devenv.exe /rebuild). Я подал это еще больше, а потом понял, что не хочу, чтобы я сидел, так что я больше отказался от Q. Теперь я ничего не вижу в окне CMD. Работает ли команда как обычно, больше просто буферизует и отображает STDOUT, и будет ли она выполняться, несмотря на то, что больше будет завершено, или эта сборка теперь никогда не завершится?

2 ответа2

2

Интересный вопрос!

Процесс, который вы добавили в БОЛЕЕ, будет продолжаться до его естественного завершения или до тех пор, пока вы его не убьете. Вот тест, чтобы показать это:

Откройте 2 окна cmd.

В командной строке: ping -n 120 127.0.0.1 | Больше

По приглашению два запустите: список задач | findstr / я пингую

Пинг будет выполняться в течение примерно 120 секунд, но при использовании стандартного окна cmd страница заполнится за меньшее время (измените команду ping соответствующим образом).

Вы можете показать в приглашении два, что PING продолжает работать независимо от того, убили ли вы БОЛЬШЕ "Q". Только после полного удаления команды PING с помощью ctrl+C или ожидания полных 50 секунд, ping останавливается.

1

Да, more буферов, и процесс продолжает выполняться, даже если вы не прокручиваете вывод.

Если выйти more рано, хотя, nonexistent pipe ошибки труб появляются в некоторых обстоятельствах. По-видимому, это не влияет на выполнение и, вероятно, связано с используемым методом тестирования.


Мы можем протестировать с помощью простого командного файла:

@echo off
for /l %%a in (1,1,100) do echo %%a
msg * done

Прибавляя это к more , становится очевидным, что процесс продолжает выполняться независимо от того, прокручивается ли more или нет: мы видим done сообщение, не продвигаясь more .

Однако, если мы увеличим время выполнения следующим образом, и выйдем more с помощью команды q mid:

@echo off
for /l %%a in (1,1,10000) do echo %%a
msg * done

Мы получаем много сообщений об ошибках:

The process tried to write to a nonexistent pipe.

Окно сообщения все еще появляется. Повторное тестирование с использованием простой программы на C # или C не повторяет это поведение. Я предполагаю, что если поток уже открыт, он будет работать как обычно (без вывода) - но команда echo использованная в приведенных выше тестах, на самом деле пытается каждый раз открывать поток заново, и как только назначение канала закрывается, это дольше возможно.

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