2010-01-12 2 views
0

명령 프롬프트 (c : \ windows \ system32 \ cmd.exe)에서 Perl 스크립트를 실행하면 스크립트 실행이 끝난 후 어떻게 명령 프롬프트를 종료 할 수 있습니까?Perl 스크립트를 호출 한 후 명령 셸을 종료하려면 어떻게합니까?

Perl 스크립트 내에 system("exit 0")을 시도했지만 Perl 스크립트가 실행중인 cmd 프롬프트 쉘을 종료하지 않았습니다.

또한 exit; 명령을 Perl 스크립트에서 시도했지만 작동하지 않습니다.

+0

을, 당신은 "간부 foo.pl"로 펄 스크립트를 호출 할 것 . –

+0

죄송합니다. 언급하지 않으시면 Windows에서 실행하고 있습니다 :-) – Santhosh

+0

이것은 달성하기 어려울 수 있습니다. 열쇠는 상위 프로세스에게 SIGHUP 신호를 보내는 것이지만 적어도 ActiveState Perl에서는 getppid()가 구현되지 않습니다. – geoffspear

답변

3

, Arkaitz 네즈에 의한 대답은, 당신이 runmyscript.bat 같은 배치 파일을 만들 수 있습니다

그렇지 않으면 (내가 그것을 위해 투표했다.) 작동합니다 내용 :

@echo off 
perl myscript.pl 
exit 

exit 쉘 세션을 종료 (. 그리고 부작용으로, 배치 스크립트 자체를 종료)합니다 배쉬에서

3

START Dos command을 사용하여 새 창에서 프로그램을 시작할 수 있습니다. /B으로 전화하면 추가 창이 생성되지 않습니다. 그런 다음 EXIT를 호출하여 현재 창을 닫을 수 있습니다.

트릭을 수행하겠습니까?

4

cmd.exe /C perl yourscript.pl을 사용해 보셨습니까?

에 따르면 cmd.exe /?에 따르면 /C은 string으로 지정된 명령을 수행 한 다음 종료합니다.

당신은 펄에서 부모 쉘에 신호를 보낼 수 있습니다
+3

그 점에 관해서는'perl yourscript.pl'을 실행하고'cmd.exe'를 완전히 빠져 나올 수 있습니다. –

0

: 당신이 다른 통해 부모 쉘의 PID를 찾을해야합니다 있도록

kill(9,$PARENT_PID);` 

불행하게도, getppid() 기능은 윈도우에 Perl로 구현되지 않습니다 방법. 또한 신호 # 9이 최선의 선택이 아닐 수도 있습니다.

+0

Windows에 신호음 (신호 번호 9)이 있습니까? –

+0

@ Noufal : SIGKILL (perl에서 보낸 것)이 Windows에서 제대로 작동합니다. – catwalk

5

이 같은 명령 줄 펄 스크립트를 실행 해보십시오 : 첫 번째가 완료되면

perl script.pl & exit 

앰퍼샌드는 두 번째 명령을 시작합니다. &&을 사용하여 첫 번째 명령이 성공한 경우에만 (오류 코드가 0 인 경우) 두 번째 명령을 실행할 수도 있습니다. 그냥 펄 스크립트를 실행하려면 명령 쉘을 시작하는 경우

+0

이 구현 방법은 확실하지 않습니다. UNIX와 관련이 있으며 Windows에서는 작동하지 않습니다. –

+3

아니, 여기보세요 : http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true –

+0

+1 매우 흥미로운 – Andomar