2010-01-12 83 views
0

如果我从命令提示符(c:\ windows \ system32 \ cmd.exe)运行Perl脚本,脚本完成执行后如何退出命令提示符。如何在调用Perl脚本后退出命令shell?

我在Perl脚本中尝试system("exit 0"),但是它不会退出运行Perl脚本的cmd提示符shell。

我也在Perl脚本中试过exit;命令,但那也行不通。

+0

在bash中,你会调用perl脚本用“EXEC foo.pl” 。 – 2010-01-12 13:47:14

+0

对不起,如果我忘了提及,我在Windows上运行它:-) – Santhosh 2010-01-12 13:51:06

+0

这可能很难完成;关键是向父进程发送SIGHUP信号,但至少在ActiveState Perl中,getppid()未实现。 – geoffspear 2010-01-12 13:55:17

回答

3

如果你开始的命令shell只运行perl脚本,通过Arkaitz希门尼斯的答案应该工作(我投了赞成票。)

如果没有,你可以创建一个批处理文件中像runmyscript.bat,与内容:

@echo off 
perl myscript.pl 
exit 

exit将结束shell会话(和它的副作用,结束批处理脚本本身)

3

您可以使用START Dos command在新窗口中启动程序。如果您使用/B来呼叫,则不会创建额外的窗口。然后您可以调用EXIT关闭当前窗口。

这会做诡计吗?

4

你试过cmd.exe /C perl yourscript.pl

根据cmd.exe /?/C执行由字符串指定的命令,然后终止。

+3

对于这个问题,你可以运行'perl yourscript.pl'并将'cmd.exe'完全退出。 – 2010-01-12 16:18:29

0

您可以从Perl中发送信号给父shell:

kill(9,$PARENT_PID);` 

不幸的是,getppid()功能并不在Perl实现在Windows上,所以你必须通过一些其他找出父shell的PID手段。另外,#9号信号可能不是最好的选择。

+0

你甚至在窗口上有SIGKILL(信号编号9)吗? – 2010-01-12 14:10:34

+0

@Noufal:我确信SIGKILL(从perl发送)可以在Windows上运行;不知道它是如何实现的虽然 – catwalk 2010-01-12 14:18:41

5

尝试使用这样的命令行运行Perl脚本:第一个完成后

perl script.pl & exit 

的符号将启动第二个命令。只有第一个成功(错误代码为0),您也可以使用&&执行第二个命令。

+0

这我相信是特定于UNIX的,并且不适用于Windows。 – 2010-01-12 14:13:37

+3

不,看这里:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/ntcmds_shelloverview.mspx?mfr=true – 2010-01-12 14:17:52

+0

+1非常有趣 – Andomar 2010-01-12 14:45:55