如何一个接一个地运行后台进程

时间:2012-02-01 12:06:47

标签: perl cgi

我正在使用Perl CGI。我在后台通过Perl CGI运行SCP命令。像

system("scp -r machinename:/PathOfFile/ /Path/WhereToCopyIt/  &")

此复制过程需要一些时间,比方说15分钟。 现在我希望在此复制过程完成后再发送电子邮件给我。 但我的问题是这个命令在后台运行。那我怎么发邮件呢? 我知道如何发送邮件但我不知道当进程在后台运行时如何发送邮件。

2 个答案:

答案 0 :(得分:5)

为什么不fork

my $pid = fork;

if ( $pid == 0 ) {   # Child

    exec( ... );  # Without the '&'
    exit( $? >> 8 );
}

else {               # Parent

    waitpid $pid, 0;
}

有关更多(可能太多?)的信息,请参阅perldoc perlforkperldoc perlipc

答案 1 :(得分:1)

启动后台作业,按顺序执行操作。基本上

system(qq'sh -c "scp -r machinename:/PathOfFile/ /Path/WhereToCopyIt/; 
          echo Done | /sendmail you@example.net" &') 

您可能希望将后台脚本封装到单独的文件中,或者至少添加一些错误检查。