우선 순위가 높은 프로세스를 시작하고 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)이 지적한 대로 쉘은 자체 우선순위 수준에서 하위 프로세스를 시작하지 않고 기본 일반 우선순위에서 시작합니다. API 수준에서 cmd가 호출하는 것으로 보입니다.프로세스 생성(자체를 전달하는 것과는 반대로 ) PRIORITY_CLASS아무것도 설정하지 않고 자식 프로세스가 기본적으로 실행되도록 합니다 .dwCreationFlagsGetPriority()NORMAL_PRIORITY_CLASS

결과적으로 다음과 같은 명령은 start /HIGH call my_little_proggy.exe ^> output.txt보조 cmd.exe 셸을 시작합니다.높은우선 순위는 리디렉션을 처리하고 실행 my_little_proggy.exe하지만 일반 우선 순위로 실행합니다. 따라서 다음 게시물에서는 start /HIGH.

이전 게시물에서 스위치를 편집하고 /HIGH기술이 일반적으로 작동 start하고 누군가가 이것이 유용하다고 생각할 수 있으므로 나머지는 아래에 남겨 두었습니다.


작성된 방식에 따르면 리디렉션은 실제로 실행되는 명령 (예: )이 아닌 명령 자체 >에 적용됩니다 . 이는 또한 하위 프로세스가 동일한 콘솔을 공유하기 때문에 작동하는 이유를 설명합니다( 콘솔 앱도 가정).startstartmy_little_proggy.exestart /Bmy_little_proggy.exe

'ed 명령 의 출력을 리디렉션하려면 (a) 보조 셸( 또는 간단히 ) start을 통해 명령을 실행하고 (b) 라인에서 특수/리디렉션 문자로 해석되지 않도록 이스케이프 처리해야 합니다 . 오히려 보존되어 실행되는 하위 쉘에 전달됩니다 . 다음 중 하나를 수행해야 합니다( 참고 ).cmd /ccall>startmy_little_proggy.exe^>

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


[ 편집 #1 ] 위 단락에 callor 요구 사항을 추가했습니다. cmd /c이유는 >출력 리디렉션이 대상 프로그램 자체가 아닌 명령줄 해석기에 의해 처리되기 때문입니다. 따라서 대상 프로그램이 작동하려면 대상을 my_little_proggy.exe직접 실행하는 대신 명령 셸에서 시작해야 합니다.

관련 정보