Inicie un proceso con alta prioridad y redirija su salida estándar en Windows

Inicie un proceso con alta prioridad y redirija su salida estándar en Windows

¿Cómo puedo iniciar un proceso con alta prioridad y aun así redirigir su salida estándar (stdout) a un archivo al mismo tiempo?

Esto no funciona:

start /HIGH my_little_proggy.exe > output.txt

Respuesta1

La bandera /B es lo que estás buscando. Lo siguiente funciona (al menos en Windows 10):

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

Respuesta2

[EDICIÓN #2 - corrección importante] Como señaló @TarnayKálmán (el OP) en un comentario, el Shell no inicia procesos secundarios en su propio nivel de prioridad, sino en la prioridad normal predeterminada. A nivel de API, cmd parece estar llamandoProceso de creaciónsin configurar ninguno PRIORITY_CLASS( dwCreationFlagsen lugar de pasar el suyo propio GetPriority()), lo que hace que el proceso secundario se ejecute de forma predeterminada NORMAL_PRIORITY_CLASS.

Como consecuencia, comandos como start /HIGH call my_little_proggy.exe ^> output.txtiniciarán un shell cmd.exe secundario enaltoprioridad, que a su vez manejará la redirección y se ejecutará my_little_proggy.exe, pero lo ejecutará con prioridad normal. Por eso, la siguiente publicación no responde a la pregunta original sobre cómo redirigir la salida cuando start /HIGH.

Edité el /HIGHcambio de mi publicación anterior y dejé el resto a continuación, ya que las técnicas funcionan starten general y alguien puede encontrarlas útiles.


Tal como está escrito, la >redirección se aplica al startcomando en sí, no al comando que startrealmente se ejecuta (en su ejemplo, my_little_proggy.exe). Esto también explica por qué start /Bfunciona, ya que el proceso hijo comparte la misma consola (suponiendo que my_little_proggy.exetambién sea una aplicación de consola).

Para redirigir la salida del startcomando 'ed, necesita (a) ejecutar el comando a través de un shell secundario (ya sea cmd /co simplemente call) y (b) escapar de >modo que la línea no lo interprete como un carácter especial/de redirección start, sino que se conserva y se pasa al shell secundario que ejecuta my_little_proggy.exe. Cualquiera de los siguientes debería hacer eso (tenga en cuenta el ^>).

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


[EDITAR #1] Se agregó el requisito callo cmd /cen el párrafo anterior. La razón es que la >redirección de salida es manejada por el intérprete de línea de comando, no por el programa de destino en sí, por lo que para que funcione, el destino my_little_proggy.exedebe iniciarse mediante un shell de comandos, en lugar de ejecutarse directamente.

información relacionada