mob*_*mob 16
帮助跟踪Perl脚本启动方式的工具:
getppid返回父进程ID.然后,您可以使用ps或/proc/<pid>获取有关调用过程的更多信息.
$^X:perl解释器的完整路径,它可以提供有关如何从shell启动Perl的线索
$0,__FILE__:从命令行调用的脚本的名称,以及当前文件名.如果它们一致,则当前文件包含从命令行调用的脚本.
@ARGV:传递给脚本的命令行参数.使用$^X,$0和@ARGV,您确切知道 Perl解释器是如何从shell启动的.
caller:堆栈跟踪信息.如果在脚本开头caller返回undef,那么您位于堆栈的顶部框架,并且您的脚本是从shell调用的.否则caller返回调用脚本的包,文件和行(带do或require).
$^T:时间(自"epoch"以来的秒数)当前Perl脚本启动的时间,因此您知道当前Perl解释器何时从shell启动.用于scalar localtime($^T)以更友好的格式查看此值.
Aviatrix删除了一个答案,他说,"尝试使用命令行参数".这是一个好主意.依赖于无法控制的事物的程序很难测试.在开发脚本时,您是否真的想从cron运行它以测试"从cron运行"功能?没门!
因此,不要让你的脚本猜测它的运行方式,而是告诉它.然后它不会猜测,然后它不会猜错(早上三点,毫无疑问).
可靠的软件是从输入到输出的纯函数.没有充分理由不添加杂质.("我希望它从cron运行时随机变化"不是一个很好的理由.)