3

Запустите программу в Windows, введя это в cmd.exe .

./myapp.exe

Тогда программа выглядит как запущенная в другом потоке, отличном от cmd. Как заставить программу работать через cmd точно так же, как в стиле Linux. Когда терминал cmd уничтожен, работающая программа также завершается. Пока программа работает, cmd будет захватывать вывод std вовремя.

1 ответ1

0

Тогда программа выглядит как запущенная в другом потоке, отличном от cmd.

Ну, программа работает в отдельном процессе, который имеет свои потоки.

В Windows существует два основных типа программ: консольные и оконные.

Консольные программы обычно представляют собой приложения в текстовом режиме, которые печатают текст. Они уже ведут себя так, как вы хотите: вы запускаете программу, оболочка (cmd.exe) ждет, пока она закончит работу, прежде чем вернуться к интерактивному приглашению. Если программа работает долго, принудительное завершение cmd.exe завершит работу программы.

Оконные программы - это, как правило, приложения с графическим интерфейсом пользователя (например, notepad.exe , explorer.exe , firefox.exe). Они ведут себя не так, как вы хотите: когда вы запускаете их через cmd.exe , cmd.exe не ожидает их и немедленно возвращает вас к интерактивному запросу. Выполненная программа запускается независимо от cmd.exe , и завершение одного не влияет на другое.

Обратите внимание, что консольные программы могут иметь окна, а оконные программы могут иметь консольный вывод. Так что же делает программу "консольной" или "оконной"?

Часть .exe указывает, должен ли он работать с подсистемой "консоль" или с подсистемой "windows". Это настраивается (часто неявно), когда программа была собрана. Это можно изменить после сборки программы; editbin.exe (входит в состав Visual Studio) может изменить файл .exe и изменить подсистему, которую должна использовать программа.

Если вы просто хотите увидеть вывод stdout и stderr, вам не нужно изменять файл .exe . Обычно оконные приложения не отправляют этот вывод куда-либо, но вы можете изменить это с помощью каналов / перенаправлений. Например, вы можете запустить:

SomeWindowedApplication.exe > output.txt

или, если у вас есть cat (или ее эквивалент):

SomeWindowedApplication.exe | cat

Это также приведет к тому, что cmd.exe будет ожидать завершения работы программы, прежде чем вернуться в интерактивное приглашение. Обратите внимание, что это не имеет требуемого поведения завершения (т. Е. Завершение cmd.exe в последнем примере приведет к завершению cat.exe , а не ShowWindowedApplication.exe).

Также см:

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