如何以高優先權啟動進程並同時將其標準輸出(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
in 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 啟動,而不是直接運行。