如何从perl脚本中启动批处理文件并从中分离

时间:2015-07-20 21:03:35

标签: multithreading perl batch-file

我想从我的脚本调用批处理文件,并希望终止我的perl脚本,批处理文件仍然在后台运行,因为它需要很长时间。

2 个答案:

答案 0 :(得分:2)

假设在退出之前,您想要执行的最后一件事是通过exec运行它。

  

exec函数执行系统命令,从不执行   返回;如果您愿意,请使用system代替exec   返回。

如果希望脚本在启动批处理文件后继续运行,则需要将其作为后台进程启动。没有具体的方法可以做到这一点; perlfaq8列出了许多可能的方法。

对于Windows,您可以将Win32::ProcessDETACHED_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模块可以更好地控制您的后台进程,但在大多数情况下这可能会有点过分。

相关问题