【发布时间】:2017-02-17 07:52:05
【问题描述】:
我有以下 perl 脚本:
#!/usr/bin/perl
use strict;
use warnings;
use Proc::Daemon;
Proc::Daemon::Init;
my $continue = 1;
$SIG{TERM} = sub { $continue = 0 };
while ($continue) {
# stuff
}
我的初始化脚本中有以下内容:
DAEMON='/path/to/perl/script.pl'
start() {
PID=`$DAEMON > /dev/null 2>&1 & echo $!`
echo $PID > /var/run/mem-monitor.pid
}
问题是,这返回了错误的 PID!这将返回在守护进程运行时启动的父进程的 PID,但该进程会立即被终止。我需要获取子进程的PID!
【问题讨论】:
-
参见
Proc::Daemon的文档。有一个名为pid_file的选项。 PID 将被写入此文件。 -
是的,我知道我可以在 Perl 中使用这个选项。但是,我想在 init 脚本中保留这样的功能(创建、删除 PID 文件),而不是在 perl 中完成 1/2,在 init 脚本中完成 1/2。
-
您可以尝试将文件名从 shell 脚本传递到命令行上的 Perl 脚本,例如
$DAEMON $pid_file > /dev/null 2>&1 ....然后 Perl 脚本可以使用这个文件名$pid_file来创建 pid 文件