我如何启动一个高优先级的进程并同时将其标准输出(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
命令(在您的示例中为)。这也解释了为什么有效,因为子进程共享同一个控制台(假设也是一个控制台应用程序)。start
my_little_proggy.exe
start /B
my_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] 在上面一段中添加了
call
或cmd /c
要求。原因是>
输出重定向由命令行解释器处理,而不是由目标程序本身处理,因此为了使其工作,目标my_little_proggy.exe
必须由命令 shell 启动,而不是直接运行。