我想从我的脚本调用批处理文件,并希望终止我的perl脚本,批处理文件仍然在后台运行,因为它需要很长时间。
答案 0 :(得分:2)
假设在退出之前,您想要执行的最后一件事是通过exec
运行它。
exec
函数执行系统命令,从不执行 返回;如果您愿意,请使用system
代替exec
返回。
如果希望脚本在启动批处理文件后继续运行,则需要将其作为后台进程启动。没有具体的方法可以做到这一点; perlfaq8列出了许多可能的方法。
对于Windows,您可以将Win32::Process与DETACHED_PROCESS
标记一起使用。
Win32::Process::Create(
$process, # process object
'myfile.bat', # application name
'', # application arguments
0, # don't inherit handles
DETACHED_PROCESS, # create as detached process
'.' # working directory for new process
);
答案 1 :(得分:2)
在Windows中,可以使用特殊呼叫system 1, ...
。这使用特定于Windows的函数为命令运行创建单独的进程。
system 1, '.\mybatch.bat';
与exec
或常规system
调用启动的进程不同,Windows perl不会等待子进程完成,然后才能终止父进程;虽然您可以捕获流程ID($pid = system 1, ...
)并将其传递给waitpid
。
Win32::Process
模块可以更好地控制您的后台进程,但在大多数情况下这可能会有点过分。