Starten Sie einen Prozess mit hoher Priorität und leiten Sie seine Standardausgabe unter Windows um

Starten Sie einen Prozess mit hoher Priorität und leiten Sie seine Standardausgabe unter Windows um

Wie kann ich einen Prozess mit hoher Priorität starten und gleichzeitig seine Standardausgabe (stdout) in eine Datei umleiten?

Das funktioniert nicht:

start /HIGH my_little_proggy.exe > output.txt

Antwort1

Das Flag /B ist das, wonach Sie suchen. Folgendes funktioniert (zumindest unter Windows 10):

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

Antwort2

[ EDIT #2 - wichtige Korrektur ] Wie @TarnayKálmán (der OP) in einem Kommentar anmerkte, startet die Shell untergeordnete Prozesse nicht mit ihrer eigenen Prioritätsstufe, sondern mit der standardmäßigen normalen Priorität. Auf API-Ebene scheint cmd aufzurufenProzess erstellenohne eines festzulegen PRIORITY_CLASS( dwCreationFlagsim Gegensatz zur Übergabe eines eigenen GetPriority()), was dazu führt, dass der untergeordnete Prozess mit der Standardeinstellung ausgeführt wird NORMAL_PRIORITY_CLASS.

Als Folge davon start /HIGH call my_little_proggy.exe ^> output.txtstarten Befehle wie eine sekundäre cmd.exe-Shell unterhochPriorität, die wiederum die Umleitung übernimmt und ausführt my_little_proggy.exe– aber mit normaler Priorität. Aus diesem Grund beantwortet der folgende Beitrag nicht die ursprüngliche Frage zur Umleitung der Ausgabe, wenn start /HIGH.

Ich habe den Schalter aus meinem vorherigen Beitrag herausgeschnitten /HIGHund den Rest unten gelassen, da die Techniken im Allgemeinen funktionieren startund jemand dies möglicherweise nützlich findet.


So wie es geschrieben ist, >bezieht sich die Umleitung auf den startBefehl selbst, nicht auf den Befehl, der starttatsächlich ausgeführt wird (in Ihrem Beispiel my_little_proggy.exe). Dies erklärt auch, warum start /Bes funktioniert, da der untergeordnete Prozess dieselbe Konsole verwendet (vorausgesetzt, my_little_proggy.exees handelt sich auch um eine Konsolenanwendung).

Um die Ausgabe des startBefehls 'ed umzuleiten, müssen Sie (a) den Befehl über eine sekundäre Shell ausführen (entweder cmd /coder einfach call) und (b) das maskieren, >damit es von der Zeile nicht als Sonder-/Umleitungszeichen interpretiert start, sondern beibehalten und an die untergeordnete Shell weitergegeben wird, die ausführt my_little_proggy.exe. Dies sollte mit einer der folgenden Methoden geschehen (beachten Sie das ^>).

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


[ BEARBEITEN #1 ] Die call„oder“ cmd /c-Anforderung wurde im obigen Absatz hinzugefügt. Der Grund dafür ist, dass die >Ausgabeumleitung vom Befehlszeileninterpreter und nicht vom Zielprogramm selbst gehandhabt wird. Damit dies funktioniert, my_little_proggy.exemuss das Ziel von einer Befehlsshell gestartet werden, anstatt direkt ausgeführt zu werden.

verwandte Informationen