在 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_CLASSin 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]在上面的段落中添加了call或要求。cmd /c原因是>輸出重定向是由命令列解釋器處理的,而不是由目標程式本身處理的,因此為了使其工作,目標my_little_proggy.exe必須由命令 shell 啟動,而不是直接運行。

相關內容