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
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
Antworten:
Die / B-Flagge ist das, wonach Sie suchen. Folgendes funktioniert (zumindest unter Windows 10):
start /HIGH /B my_little_proggy.exe > output.txt
[BEARBEITEN # 2 - Hauptkorrektur] Wie von @ TarnayKálmán (the OP) in einem Kommentar gezeigt, startet die Shell untergeordnete Prozesse nicht auf ihrer eigenen Prioritätsstufe, sondern auf der normalen Standardpriorität. Auf der API-Ebene scheint cmd aufzurufen CreateProcess ohne irgendwelche einzustellen PRIORITY_CLASS im dwCreationFlags (im Gegensatz zu seinem eigenen Bestehen GetPriority() ), wodurch der untergeordnete Prozess standardmäßig ausgeführt wird NORMAL_PRIORITY_CLASS.
Infolgedessen mögen Befehle start /HIGH call my_little_proggy.exe ^> output.txt Startet eine sekundäre cmd.exe-Shell unter hoch Priorität, die wiederum die Umleitung übernimmt und ausgeführt wird my_little_proggy.exe - aber mit normaler Priorität ausführen. Aus diesem Grund beantwortet der folgende Beitrag die ursprüngliche Frage der Umleitung der Ausgabe nicht, wenn start /HIGH.
Ich habe das herausgeschnitten /HIGH Wechsle von meinem vorherigen Beitrag und lasse den Rest unten, da die Techniken funktionieren start im Allgemeinen und jemand kann dies nützlich finden.
Die Art, wie es geschrieben steht, die > Umleitung gilt für die start Kommando selbst, nicht das Kommando das start tatsächlich läuft (in Ihrem Beispiel, my_little_proggy.exe ). Dies erklärt auch warum start /B funktioniert, da der untergeordnete Prozess dieselbe Konsole verwendet (vorausgesetzt, my_little_proggy.exe ist auch eine Konsolen-App).
Um die Ausgabe der umzuleiten start 'ed Befehl, müssen Sie (a) den Befehl über eine sekundäre Shell ausführen (entweder cmd /c oder einfach call ) und (b) entkommen dem > so dass es nicht als Sonderzeichen / Umleitungszeichen von der interpretiert wird start line, sondern bleibt erhalten und wird an die laufende Child-Shell weitergereicht my_little_proggy.exe. Eine der folgenden Möglichkeiten sollte dies tun (beachten Sie die ^> ).
start call my_little_proggy.exe ^> output.txt
start cmd /c my_little_proggy.exe ^> output.txt
call oder cmd /c Anforderung im obigen Absatz. Grund ist, dass die > Die Ausgabeumleitung wird vom Befehlszeileninterpreter und nicht vom Zielprogramm selbst ausgeführt, damit das Ziel ausgeführt werden kann my_little_proggy.exe muss von einer Befehlsshell gestartet werden, anstatt direkt ausgeführt zu werden.
start /high cmd /c ping bix.hu ^>00 funktioniert gut hier.
call oder cmd /c Anforderung.
start /HIGH ping bix.hu ^> ping.txt. Die Datei wird nicht einmal erstellt und ping.exe wird sofort beendet.