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

1

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
Tarnay Kálmán
quelle

Antworten:

3

Die / B-Flagge ist das, wonach Sie suchen. Folgendes funktioniert (zumindest unter Windows 10):

start /HIGH /B my_little_proggy.exe > output.txt
Tarnay Kálmán
quelle
1

[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


[EDIT # 1] Hinzugefügt die 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.
dxiv
quelle
Nach einem kurzen Versuch scheint dies nicht zu funktionieren. Ich habe es versucht start /HIGH ping bix.hu ^> ping.txt. Die Datei wird nicht einmal erstellt und ping.exe wird sofort beendet.
Tarnay Kálmán
"Schlechter Parameter & gt ;." - sagt ping (?)
Tarnay Kálmán
start /high cmd /c ping bix.hu ^>00 funktioniert gut hier.
dxiv
P.S. Bearbeitet den Beitrag zur Verdeutlichung der call oder cmd /c Anforderung.
dxiv
1
Ja ... Das startet es und leitet die Ausgabe um, aber nur die neue cmd.exe wird mit hoher Priorität ausgeführt und Ping nicht.
Tarnay Kálmán