【问题标题】:How do I execute an external program from Perl and have the perl script continue如何从 Perl 执行外部程序并让 perl 脚本继续运行
【发布时间】:2020-04-01 20:49:05
【问题描述】:

我正在 Ubuntu 上从 cron 作业运行 perl 脚本。作为脚本的一部分,它需要执行外部程序,而不是等待程序完成并继续执行脚本。我尝试了以下方法,但据我所知,它没有执行程序,并且接缝不继续执行脚本。

exec("/usr/bin/dotnet /usr/local/myprogram/myprogram.dll arg1, arg2, moreargs")
    or print STDERR "Couldn't exec myprogram";

【问题讨论】:

    标签: perl


    【解决方案1】:

    所以:

    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();
    

    【讨论】:

    • 为什么要调用wait()?
    • @GordonGudmundson:因为perldoc.perl.org/functions/fork.html 说“如果你不等孩子就分叉,你会积累僵尸。”我实际上不确定这是一个多大的问题,但由于它很容易解决,所以也可以。
    • 在我的情况下,我不想要 wait(),因为分叉的进程运行时间很长,但很短暂。感谢您的帮助!
    猜你喜欢
    • 2017-06-14
    • 2015-09-12
    • 2011-07-10
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2010-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多