在 Windows 上启动高优先级的进程并重定向其标准输出

在 Windows 上启动高优先级的进程并重定向其标准输出

我如何启动一个高优先级的进程并同时将其标准输出(stdout)重定向到一个文件?

这不起作用:

start /HIGH my_little_proggy.exe > output.txt

答案1

/B 标志就是您要找的。以下方法有效(至少在 Windows 10 上):

start /HIGH /B my_little_proggy.exe > output.txt

答案2

[编辑 #2 - 重大更正] 正如@TarnayKálmán(OP)在评论中指出的那样,shell 不会以其自己的优先级启动子进程,而是以默认的正常优先级启动子进程。在 API 级别,cmd 似乎正在调用创建进程而不设置任何PRIORITY_CLASS内容dwCreationFlags(而不是传递其自己的GetPriority()),这会导致子进程以默认方式运行NORMAL_PRIORITY_CLASS

因此,像这样的命令start /HIGH call my_little_proggy.exe ^> output.txt将在以下位置启动辅助 cmd.exe shell:高的优先级,它反过来会处理重定向并运行my_little_proggy.exe- 但以正常优先级运行。因此,以下帖子没有回答当 时重定向输出的原始问题start /HIGH

我从之前的帖子中删除了该开关,并将其余部分保留在下面,因为这些技术通常都/HIGH有效,而且有人可能会发现这很有用。start


按照编写方式,>重定向适用于命令本身,而不是实际运行的start命令(在您的示例中为)。这也解释了为什么有效,因为子进程共享同一个控制台(假设也是一个控制台应用程序)。startmy_little_proggy.exestart /Bmy_little_proggy.exe

要重定向 'ed 命令的输出start,您需要 (a) 通过辅助 shell 运行该命令(或者cmd /c只是call),并且 (b) 转义 ,>以便它不会被该start行解释为特殊/重定向字符,而是被保留并传递给运行 的子 shell my_little_proggy.exe。以下任一方法都应该可以做到这一点(请注意^>)。

start call my_little_proggy.exe ^> output.txt
start cmd /c my_little_proggy.exe ^> output.txt


[编辑 #1] 在上面一段中添加了callcmd /c要求。原因是>输出重定向由命令行解释器处理,而不是由目标程序本身处理,因此为了使其工作,目标my_little_proggy.exe必须由命令 shell 启动,而不是直接运行。

相关内容