如何从父perl守护进程获取pid?

时间:2014-10-16 09:46:53

标签: perl daemon

我有一些测试代码:

#!/usr/bin/perl
use strict;
use warnings;
use Proc::Daemon;

my $daemon = Proc::Daemon->new;
Proc::Daemon::Init();
my $kid_pid = $daemon->Init(
    {   work_dir     => '/home/develop',
        pid_file     => 'pid.txt',
        exec_command => 'perl /home/develop/test.pl ',
    }
);
$| = 1;

while (1) {
    my $status = $daemon->Status( [$kid_pid] );
    if ( !$status ) {
        my $kid_pid = $daemon->Init(
            {   work_dir     => '/home/develop',
                pid_file     => 'pid.txt',
                exec_command => 'perl /home/develop/test.pl ',
            }
        );
    }
    sleep(5);
}

我需要脚本test.pl来了解他的PID。给他一个PID作为一个参数是理想的,但在Init方法的论据中给他$ kid_pid的课程是不可能的。从文件中读取的选项不合适。

现在我需要知道父脚本的PID。代码my $ppid = Proc::Daemon::Init();对我不起作用,因为我有脚本循环而且他工作不正常。 $$也不起作用,因为Proc::Daemon::Init()有另一个PID。

1 个答案:

答案 0 :(得分:1)

您可以使用$$获取当前带有getppid()变量的PID和父PID。

perl -E 'say fork || getppid, " me:[$$]"'
7503 me:[7477]
7477 me:[7503]