【发布时间】:2014-06-01 09:36:42
【问题描述】:
我在 Ubuntu 上运行了一个用 Perl 编写的守护进程,它现在是单线程的。当它启动时,它会执行通常的 Proc::Daemon 操作,然后进入一个由布尔值限制的 while 循环。守护程序使用“服务守护程序启动”正常启动。但是当我想用“service daemon stop”杀死它时,它并没有停止。
应该通过使用信号处理程序翻转布尔值来实现停止:
$SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&signalHandler;
sub signalHandler {
$continue = 0;
}
不幸的是,主循环也有一个睡眠。所以守护进程在睡眠结束之前不会结束。我希望守护进程立即结束。但我不想设置非常低的睡眠时间。事实上,我希望能够设置几个小时的睡眠时间,如果这是它决定应该做的。
最好的方法是什么?
我正在考虑在主循环中调用某种阻塞函数而不是睡眠。在某个线程死亡之前,此阻塞函数不会返回。然后在信号处理程序中,我会简单地杀死那个睡眠线程。这是一个好方法吗?我该怎么做呢,我以前从未在 Perl 中做过多线程。
感谢您的帮助
【问题讨论】:
-
如果您发送
SIGALRM,睡眠呼叫会发生什么? -
它停止了..不知道..
标签: linux multithreading perl daemon