2
我有一个小的Perl守护进程,我重构,我有一个最佳实践问题。守护进程关闭和清理
守护进程在启动时写出一个pid文件,并在关闭时删除它。
你会建议把pid文件删除代码,在这样的信号处理程序:
$SIG{__DIE__} = \&cleanup;
,或者我应该把这些代码在END{}
块?
我有一个小的Perl守护进程,我重构,我有一个最佳实践问题。守护进程关闭和清理
守护进程在启动时写出一个pid文件,并在关闭时删除它。
你会建议把pid文件删除代码,在这样的信号处理程序:
$SIG{__DIE__} = \&cleanup;
,或者我应该把这些代码在END{}
块?
SigDie仅建议用于调试目的,坚持END和DESTROY块。部分原因是SigDie可能会被覆盖,有时甚至会被一个包含的库或子文件占据,其中多个END块将以相反的顺序执行。
下面是您可能遇到的问题的示例;
#!/usr/bin/env perl
use strict;
use warnings;
$SIG{__DIE__} = sub { print("SIG:Foo\n"); };
END { print("END:Foo\n"); }
Foo::do();
die "Something went wrong";
package Foo;
sub do {
# do something useful, but oops forgot
# to remove my debug SIG...
$SIG{__DIE__} = sub { print("SIG:Bar\n"); };
}
END { print("END:Bar\n"); }
__END__
## Example Output, note no SIG:Foo
SIG:Bar
Died at test-end.pl line 10.
END:Bar
END:Foo
我喜欢这里。多么好的答案!谢谢@ harvey! –