우선 순위가 높은 프로세스를 시작하고 동시에 표준 출력(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
아무것도 설정하지 않고 자식 프로세스가 기본적으로 실행되도록 합니다 .dwCreationFlags
GetPriority()
NORMAL_PRIORITY_CLASS
결과적으로 다음과 같은 명령은 start /HIGH call my_little_proggy.exe ^> output.txt
보조 cmd.exe 셸을 시작합니다.높은우선 순위는 리디렉션을 처리하고 실행 my_little_proggy.exe
하지만 일반 우선 순위로 실행합니다. 따라서 다음 게시물에서는 start /HIGH
.
이전 게시물에서 스위치를 편집하고 /HIGH
기술이 일반적으로 작동 start
하고 누군가가 이것이 유용하다고 생각할 수 있으므로 나머지는 아래에 남겨 두었습니다.
작성된 방식에 따르면 리디렉션은 실제로 실행되는 명령 (예: )이 아닌 명령 자체 >
에 적용됩니다 . 이는 또한 하위 프로세스가 동일한 콘솔을 공유하기 때문에 작동하는 이유를 설명합니다( 콘솔 앱도 가정).start
start
my_little_proggy.exe
start /B
my_little_proggy.exe
'ed 명령 의 출력을 리디렉션하려면 (a) 보조 셸( 또는 간단히 ) start
을 통해 명령을 실행하고 (b) 라인에서 특수/리디렉션 문자로 해석되지 않도록 이스케이프 처리해야 합니다 . 오히려 보존되어 실행되는 하위 쉘에 전달됩니다 . 다음 중 하나를 수행해야 합니다( 참고 ).cmd /c
call
>
start
my_little_proggy.exe
^>
start call my_little_proggy.exe ^> output.txt
start cmd /c my_little_proggy.exe ^> output.txt
[ 편집 #1 ] 위 단락에
call
or 요구 사항을 추가했습니다. cmd /c
이유는 >
출력 리디렉션이 대상 프로그램 자체가 아닌 명령줄 해석기에 의해 처리되기 때문입니다. 따라서 대상 프로그램이 작동하려면 대상을 my_little_proggy.exe
직접 실행하는 대신 명령 셸에서 시작해야 합니다.