0

我想在 perl 中创建一个能够启动和终止子进程的程序。

细节:当给定命令时,父进程将产生一个新的子进程并根据需要通过命令行传递参数。一旦子进程启动,父进程将继续前进并等待另一个命令。这些命令要么启动一个进程,要么停止一个特定的进程。

父进程永远不应该等待子进程。所有孩子都可以优雅地退出并根据需要进行清理。但是,父进程需要根据需要跟踪和终止任何单个子进程。

我目前正在构建这个父脚本,但想知道我是否使用了正确的 perl 函数以及这样做的最佳实践是什么。

我将使用以下 Perl 函数之一以及 waitpid($pid, WNOHANG) 和 kill('TERM', $pid) 的组合。这是正确的方法吗?有没有现成的解决方案?这里的最佳做法是什么?

系统函数 exec 函数 反引号 (``) 运算符打开函数

这是我的工作代码。

sub spawnNewProcess
{
    my $message = shift;

    # Create a new process
    my $pid = fork;
    if (!$pid)
    {
        # We're in the child process here. We'll spawn an instance and exit once done
        &startInstance( $message );
        die "Instance process for $message->{'instance'} has completed.";
    }
    elsif($pid)
    {
        # We're in the parent here. Let's save the child pid.
        $INSTANCES->{ $message->{'instance'} } = $pid;
    }
}


sub stopInstance
{
    my $message = shift;

    # Check to see if we started the specified instnace 
    my $pid = $INSTANCES->{$message->{'instance'}};
    if( $pid )
    {
        # If we did, then check to see if it's still running
        while( !waitpid($pid, WNOHANG) )
        {
            # If it is, then kill it gently
            kill('TERM', $pid);

            # Wait a couple seconds
            sleep(3);

            # Kill it forceably if gently didn't work
            kill('KILL', $pid) if( !waitpid($pid, WNOHANG) );
        }
    }  
}
4

1 回答 1

1

守护进程怎么样::控制http://hashbang.ca/2012/04/16/wherein-i-realize-the-bliss-of-writing-init-scripts-with-daemoncontrol

它可以启动/停止一个进程。

问候

于 2013-03-05T08:19:43.850 回答