【问题标题】:Does Sys::Syslog call closelog() for you if your script die()s?如果您的脚本死亡(),Sys::Syslog 会为您调用 closelog() 吗?
【发布时间】:2015-10-22 21:36:21
【问题描述】:

这可能是语法问题,但无论如何,只是为了澄清......perldoc on Sys::Syslog 状态:

Sys::Syslog 的第三条规则是:程序崩溃、死亡、调用 closelog ,日志结束。

如果“程序”指的是整个事情,包括我的脚本和 Sys::Syslog,这是否意味着 Sys::Syslog 会为我调用 closelog()?

如果不是,这是否意味着我应该将closelog() 放在 END 块中?

【问题讨论】:

  • 在源代码中没有这样的END 块。 /eg 和 /t 在这方面似乎也没有任何东西。你试过了吗?
  • @simbabque,我也没有看到。 /eg 和 /t 是什么?此外,我不确定如果 closelog() 没有运行会发生什么,这将向我表明它是否有效;因此我在这里问。你将如何测试它?
  • 嗯,它是一个 Perl 模块,即使它在核心中。所以它在 CPAN 上。在那里你可以浏览它:metacpan.org/source/SAPER/Sys-Syslog-0.33 - 不幸的是,我不知道测试它的好方法,因为我真的不知道它的作用。也许得到一个干净的虚拟机,然后尝试打开日志,写一些东西并制作程序die。你会看到会发生什么。 :)
  • @simbabque 我确实查看了源代码,但我不确定是否有其他方法可以实现这一点。 /eg 和 /t 是什么?
  • /t 目录是测试在分发中的位置。 /eg 有时也在那里。它包含示例。从我上面评论中的链接中查看 metacpan 上的浏览​​分发功能。

标签: perl syslog


【解决方案1】:

Sys::Syslog 在退出时调用closelog()。查看closelog()disconnect_log() 调用https://metacpan.org/source/SAPER/Sys-Syslog-0.33/Syslog.pm

但在大多数情况下,在脚本中的 exit/die 上省略 closelog() 是安全的:无论如何,描述符将在进程退出时关闭。

大多数情况是指 Perl 解释器在脚本退出/终止时终止的情况。排除是特殊环境,例如 mod_perl:如果你的脚本死了,进程不会退出。

【讨论】:

  • “大多数情况”是什么意思?
  • “大多数情况”是指当 Perl 解释器在脚本退出/终止时终止时使用普通脚本的情况。排除是特殊环境,例如 mod_perl:如果您的脚本死掉,进程不会退出。
猜你喜欢
  • 1970-01-01
  • 2010-11-30
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多