如何从Perl执行外部程序并使Perl脚本继续

如何从Perl执行外部程序并使Perl脚本继续,perl,Perl,我正在Ubuntu上运行一个来自cron作业的perl脚本。作为脚本的一部分,它需要执行一个外部程序,而不是等待程序完成并继续执行脚本。我已经尝试了下面的方法,但尽我所能,它没有执行程序,也没有继续脚本 exec("/usr/bin/dotnet /usr/local/myprogram/myprogram.dll arg1, arg2, moreargs") or print STDERR "Couldn't exec myprogram"; 要调用程序,应将程序参数作为单独的参数

我正在Ubuntu上运行一个来自cron作业的perl脚本。作为脚本的一部分,它需要执行一个外部程序,而不是等待程序完成并继续执行脚本。我已经尝试了下面的方法,但尽我所能,它没有执行程序,也没有继续脚本

exec("/usr/bin/dotnet /usr/local/myprogram/myprogram.dll arg1, arg2, moreargs")
    or print STDERR "Couldn't exec myprogram";
  • 要调用程序,应将程序参数作为单独的参数传递给
    exec
    。(见附件。)
  • 由于您希望脚本在不等待程序返回的情况下继续运行,因此应使用
    fork
    (请参阅),以便有两个单独的进程并行运行(一个运行程序,一个运行脚本的其余部分)
因此:

  • 要调用程序,应将程序参数作为单独的参数传递给
    exec
    。(见附件。)
  • 由于您希望脚本在不等待程序返回的情况下继续运行,因此应使用
    fork
    (请参阅),以便有两个单独的进程并行运行(一个运行程序,一个运行脚本的其余部分)
因此:


为什么要调用wait()?@GordonGudmundson:因为上面说“如果你在没有等待孩子的情况下使用fork,你会积累僵尸。”我实际上不确定这是一个多大的问题,但因为它很容易修复,也可以。在我的情况下,我不想使用wait(),因为fork过程运行时间很长,但短暂。谢谢你的帮助!为什么要调用wait()?@GordonGudmundson:因为上面说“如果你在没有等待孩子的情况下使用fork,你会积累僵尸。”我实际上不确定这是一个多大的问题,但因为它很容易修复,也可以。在我的情况下,我不想使用wait(),因为fork过程运行时间很长,但短暂。谢谢你的帮助!
my $child_pid = fork();
die "Couldn't fork" unless defined $child_pid;
if (! $child_pid) {
  exec '/usr/bin/dotnet', '/usr/local/myprogram/myprogram.dll', 'arg1', 'arg2', 'moreargs';
  die "Couldn't exec myprogram: $!";
}

# rest of script

wait();