배치 파일 실행 후 cmd가 종료되지 않는 이유는 무엇입니까?


25

배치 파일 실행 후 cmd가 종료되지 않는 이유는 무엇입니까?

나는 시도했다 :

"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

@echo off
"C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar
exit

답변:


31

Java 앱이 종료되지 않으면 (예 : 배치 파일을 사용하여 Java 앱을 시작하는 경우) start명령을 사용하여 시작하십시오.

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

그러면 Java 앱이 시작되고 Java 앱이 완료 될 때까지 기다리지 않고 배치 파일을 계속 실행할 수 있습니다.


20

설명:

작동 방식은 다음과 같습니다. 배치 파일은 한 번에 한 줄씩 처리됩니다. 각 명령이 차례로 실행되고 배치 프로세서는 다음 명령을 시작하기 전에 한 명령이 완료되기를 기다립니다. 실행중인 Java 응용 프로그램 (Jilko.jar)이 실행 된 후에도 계속 실행되는 윈도우 프로그램이기 때문에 발생하는 문제입니다. 작업을 수행 한 다음 종료하는 도구 인 경우 배치 파일은 다음 명령으로 계속 진행됩니다 (또는 더 이상 없으면 종료). 프로그램이 여전히 실행 중이므로 배치 프로세서는 창이 닫힐 때까지 기다렸다가 계속 진행합니다. Java 프로그램을 종료하면이를 확인할 수 있습니다. 배치 파일이있는 콘솔 창이 닫힙니다.


해결책:

이를 해결하기 위해해야 ​​할 일은 배치 프로세서가 프로그램을 시작하고 다음과 같이 기다리지 않고 계속하도록 지시하는 것입니다.

start "" "C:\Program Files (x86)\Java\jre6\bin\javaw.exe" -Xmx1024M -Xms1024M -jar Jilko.jar

런스 언급 은이 ""콘솔 창에 사용하는 제목이다. 그러나 명령이 따옴표가 아닌 경우에만 선택적입니다. 그렇지 않으면 필요합니다 . 마음에 들거나 비워두면 무언가를 넣을 수 있지만 명령이 따옴표로 묶여 있으면 있어야합니다. 그렇지 않으면 명령 해석기가 따옴표로 묶인 명령을 제목으로 취급하고 대기중인 콘솔을 엽니 다. 할 일.

대신 다음 명령을 사용할 수 있지만 따옴표는 모든 시스템에서 동일하지 않을 수 있으므로 따옴표가 더 쉽고 안전합니다.

start C:\Progra~2\Java\jre6\bin\javaw.exe -Xmx1024M -Xms1024M -jar Jilko.jar

start명령은 기본적으로 시작 메뉴에서 프로그램을 실행하는 것과 같이 프로세스를 생성하는 기본 제공 명령입니다. 따라서이 상황에서 배치 프로세서는 start명령을 실행하여 지정된 프로그램을 실행하고 종료됩니다 (자체가 아닌 프로그램 자체). 따라서 배치 프로세서는 예상대로 계속 진행됩니다. 또한 프로그램 최소화 ( /min) 또는 최대화 ( /max) 실행, 낮은 우선 순위 ( /low) 실행 등 유용한 옵션이 있습니다 . 자세한 내용 start /?을 참조하십시오.


우리는 같은 시작 고려할 수 nohup en.wikipedia.org/wiki/Nohup
무하마드 Hewedy

아니요 (nohup 및 &와 비교하지 않는 한).
Hennes

7

나는 시작한 일부 프로그램이 프로세스를 실행 상태로 남겨두고 실행 파일을 시작하여 실행하면 콘솔 창이 닫힐 때까지 닫히지 않는다는 것을 알았습니다.

START 프로그램이이를 해결하지만 START의 오래된 문제는 여전히 남아 있습니다. 당신은 단지 사용할 수 없습니다 :

START "c:\my dir\myfile.exe"

START의 첫 번째 매개 변수는 여전히 창 이름입니다. 생략하면 시작하려는 이름의 창이 표시된 CMD 콘솔 상자를 열면됩니다. 위의 경우에는 창 제목이 " c : \ my dir \ myfile.exe "인 콘솔 창이 나타납니다 . 내가 원하는 것이 아닙니다!

창 이름을 생략하려면 큰 따옴표 쌍을 사용하여 다음과 같이 빈 문자열을 정의하십시오.

START "" "c:\my dir\myfile.exe"

마지막으로 EXIT 명령으로 배치 파일을 종료하여 파일이 닫히도록하십시오.

이 방법은 Windows 7 및 8에서 일관되게 작동하는 것 같습니다.

문제 해결을 위해 내가하려고하는 일의 ECHO를 추가 한 다음 방금 수행 한 시간 초과가 많은 도움이된다는 것을 알았습니다. 예를 들면 다음과 같습니다.

ECHO I'm about to launch the program...
START "" "c:\my dir\myfile.exe"
TIMEOUT 5

타임 아웃은 카운트 다운을 제공하므로 지연하려고 ECHO 할 필요가 없습니다.


5

또한 Windows 7에서는 EXIT 를 항상 사용 하십시오. 이전 Windows 버전에서와 같이 배치 파일의 끝 부분에 도달 하더라도 반드시 파일을 종료 할 필요는 없습니다. Windows 7은 이전 NT 버전 (예 : Windows 2000 Professional)보다 더 민감 할 수 있습니다. 이것은 일부 답변 에서 언급 되었지만 이전 답변 모두아닙니다 .

답변을 지원하기위한 개인 경험의 세부 사항 :

StarSuite 5.2 설치를 Windows 2000에서 Windows 7로 전송 한 후 제품군을 종료 할 때 메모리 공간 오류가 발생했습니다. 이것은 Windows 2000에서는 보이지 않았습니다.

몇 년 전, soffice.ini를 자동으로 백업하고 복원하기 위해 배치 파일을 작성하여 손상되었을 때 복구 할 수 있도록했습니다 (종종 문제가 될 정도로 스위트가로드되지 않음). 그러나 자동 백업 (Office52 \ user \ config \ startup에 배치 파일에 대한 링크로 트리거 됨)은 약 5 초 후에 발생합니다. 배치 파일이 실행되기 직전에 스위트를 종료 할 때마다 스위트의 종료가 오류없이 진행되는 것을 알았습니다. 이것은 배치 파일의 문제를 지적했습니다.

'EXIT'명령이 배치 파일의 마지막 줄로 배치 된 후, 오피스 스위트는 배치 파일의 실행 여부에 관계없이 항상 메모리 공간 오류 메시지없이 종료되기 시작했습니다.


2

앱이 완료되면 종료해야합니다. Java 앱이 올바르게 종료되고 있습니까?


2

나는 방금 같은 문제를 다루고 있었고 배치 파일을 무작위로 변경 한 것처럼 마침내 해결되었습니다. 왜 그런지 이해하지 못하지만 나중에 다른 사람을 도울 수 있도록 여기에 게시 할 것입니다.

내가 사용하게 시스 인 터널 Pskill의 유틸리티와 수면 XP 홈 명령 줄 기능면에서 많이 포함되어 있지 않기 때문에 유틸리티를.


이것은 실제로 완료된 후 배치 파일입니다.

@echo off
start /min C:\Progra~1\PsTools\pskill.exe explorer.exe
start /min C:\Progra~1\PsTools\pskill.exe Powermenu.exe
start /min C:\Progra~1\PsTools\pskill.exe PWGen.exe
start /min C:\Progra~1\PsTools\pskill.exe redshiftgui.exe
start /min C:\Progra~1\PsTools\pskill.exe clipx.exe
sleep 2
start explorer.exe
sleep 3
start C:\Progra~1\ClipX\clipx.exe
sleep 1
start C:\Progra~1\Powermenu\PowerMenu.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
start C:\Progra~1\RedshiftGUI\redshiftgui.exe && exit

마지막 몇 줄을 다음과 같이 변경하면 cmd 창이 모서리에서 'X'를 클릭 할 때까지 열린 상태로 유지됩니다.

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe && exit

pskill을 호출하여 자체적으로 종료하려고하더라도 cmd.exe 프로세스가 작업 관리자에서 사라지고 pskill은 cmd.exe 내부에서 cmd.exe 프로세스가 종료되었다고 cmd.exe보고했지만 여전히 창은 계속 유지됩니다. 모서리에서 'X'를 클릭했습니다.

start C:\Progra~1\RedshiftGUI\redshiftgui.exe
sleep 1
start /min C:\Progra~1\PWGen\PWGen.exe
sleep 1
C:\Progra~1\PsTools\pskill.exe cmd.exe

&& exit모든 라인에 추가 한 후 , 그들 중 일부는 그것에 응답하고 배치 처리를 방해하지만 다른 것들은 그렇지 않은 것을 알았습니다.

그래서 나는 원래의 반응 방식 대신 반응 형 중 하나를 마지막에 넣었습니다.

내가 말했듯이, 나는 왜 그런지 모르겠지만 이것이 끝나서 기쁘다.


1
이것은 너무 불필요 합니다.
surfasb

&& exit 작동합니다
jekcom


0

내가 한 방법은 다음과 같습니다.

  1. 다음 내용으로 배치 파일을 작성하십시오.

    java -Xms512M -Xmx512M -jar yourFileName.jar -o true
    EXIT
    
  2. 이탈 입력 스트림 내에 다음을 추가하십시오.

    System.exit(1);
    

0

Windows 2003에는 기본적으로 제어판에 "사용자 계정"이 없습니다. 사용자 계정을 개설하기 위해 간단한 배치를 작성했습니다.

@echo off  
rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll  
exit

정상적으로 작동했지만 사용자 계정이 열렸지만 CMD 창이 계속 열려 있습니다. 여기에서 약간의 조사를 한 후 다음과 같이 2 행의 시작 부분에 START ""를 추가했습니다.

@echo off  
Start "" rundll32.exe %SystemRoot%\system32\netplwiz.dll,UsersRunDll o
exit

이제 사용자 계정 창이 열리고 CMD 창이 닫힙니다. 쉬워요.


0

EXIT 명령이 알 수없는 이유로 창을 열어두면 배치 파일 창을 닫는 솔루션을 검색하고 검색했습니다. 나는 마침내 해결책을 발견했다.

배치 파일 끝에서 EXIT를 제거하고 다음을 사용하십시오.

Taskkill /IM conhost.exe /F

0

Windows 7 32 비트 시스템에서 순 사용 배치 파일을 작성했으며 배치 파일의 cmd가 실행 후에 종료되지 않습니다. 다른 Windows 7 64 비트 시스템에서 동일한 배치 파일을 실행하고 배치 파일의 cmd가 정상적으로 종료됩니다.

Bryan의 제안을 시도했지만 conhost.exe 프로세스가 없기 때문에 Windows 7 32 비트 시스템에서 작동하지 않으므로 다음과 같이 수정했습니다.

Taskkill /IM cmd.exe /F

순 사용 배치 파일이 항상 정상적으로 종료되는 것은 아니며 "일괄 처리 종료 (Y / N)"확인이 무작위로 표시됩니다 .

스레드 에 따르면 배치 파일을 다음과 같이 수정했습니다.

@echo off

if "%~1"=="-FIXED_CTRL_C" (
   REM Remove the -FIXED_CTRL_C parameter
   SHIFT
) ELSE (
   REM Run the batch with <NUL and -FIXED_CTRL_C
   CALL <NUL %0 -FIXED_CTRL_C %*
   GOTO :EOF
)

net use \\Server\folder

Taskkill /IM cmd.exe /F

순 사용 배치 파일 은 결국 정상적으로 종료됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.