通过在 中输入此内容来在 Windows 中运行程序cmd.exe
。
./myapp.exe
然后程序看起来就像在另一个线程中运行,与 cmd 不同的线程。如何让程序通过 cmd 运行,就像 Linux 风格一样。当 cmd 终端销毁时,正在运行的程序也会终止。在程序运行时,cmd 将按时捕获 std 输出。
答案1
然后程序看起来就像在另一个线程中运行,与cmd不同的线程。
嗯,该程序在一个单独的过程,它有自己的线程。
在 Windows 上,主要有两种类型的程序:控制台和窗口。
控制台程序通常是打印文本的文本模式应用程序。这些程序已经按照您想要的方式运行:您运行程序,shell ( 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
)。
另请参阅: